C# windows 窗体,Line 不会绘制!画布未定义
Posted
技术标签:
【中文标题】C# windows 窗体,Line 不会绘制!画布未定义【英文标题】:C# windows form, Line wont Draw! canvas is not defined 【发布时间】:2021-02-09 05:09:26 【问题描述】:在第 27 行定义“画布”需要什么?我到处都看过,但它只给出了为什么一个对象可能没有被定义,而不是为什么没有定义特定的对象画布。谁能告诉我我错过了什么?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void Form1_Load(object sender, EventArgs e)
private void canvas_Paint(object sender, PaintEventArgs e)
Graphics gObject = canvas.CreateGraphics();
Brush red = new SolidBrush(Color.Red);
Pen redPen = new Pen(red, 8);
gObject.DrawLine(redPen, 10, 10, 35, 500);
【问题讨论】:
“谁能告诉我我错过了什么?” 可能是一个名为 canvas 的对象? 另外,同样重要的是,您需要将Graphics gObject = canvas.CreateGraphics();
替换为Graphics gObject = e.Graphics;
- Winforms 图形基本规则#1:永远不要使用control.CreateGraphics
!永远不要尝试缓存 Graphics
对象!使用Graphics g = Graphics.FromImage(bmp)
或在控件的Paint
事件中使用e.Graphics
参数绘制到Bitmap bmp
中。您可以通过执行最小化/最大化序列来测试图形的持久性..跨度>
另外:你在哪里找到那段代码? (几乎每一行都有错误!)
【参考方案1】:
那个canvas
必须是表单中的一个控件。您必须将其添加到设计器中并为其命名为canvas
。哪一种?嗯……我会说使用 PictureBox。
您还需要从属性面板(事件选项卡)将Paint
事件链接到canvas_Paint
。是的,e.Graphics
比使用 CreateGraphics
更受欢迎。
你从哪里得到的代码?
【讨论】:
相同的代码实际上来自多个地方,但我是从youtube.com/watch?v=s94WCTDMtbw得到的。 @scarreer 在这里,视频的第一个镜头,您可以在属性面板中看到所选项目是一个名为canvas
的Panel
,其中Paint
事件链接到canvas_Paint
。而且,看看设计师,我猜它已经将Dock
设置为Fill
和BackColor
设置为White
。这应该让你开始。
@scarreer 作者不应该使用CreateGraphics
。首先,它正在泄漏它们。只需使用e.Graphics
。
您还应该处理创建的画笔和钢笔。
PictureBox 将是比 Panel 更好的画布,因为它是开箱即用的 DoubleBuffered。以上是关于C# windows 窗体,Line 不会绘制!画布未定义的主要内容,如果未能解决你的问题,请参考以下文章