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 在这里,视频的第一个镜头,您可以在属性面板中看到所选项目是一个名为canvasPanel,其中Paint 事件链接到canvas_Paint。而且,看看设计师,我猜它已经将Dock 设置为FillBackColor 设置为White。这应该让你开始。 @scarreer 作者不应该使用CreateGraphics。首先,它正在泄漏它们。只需使用e.Graphics 您还应该处理创建的画笔和钢笔。 PictureBox 将是比 Panel 更好的画布,因为它是开箱即用的 DoubleBuffered。

以上是关于C# windows 窗体,Line 不会绘制!画布未定义的主要内容,如果未能解决你的问题,请参考以下文章

C#中GDI如何连续绘制线段

在 Windows 窗体 c# 中绘制动态面板

C#wpf里面怎么绘制线条

在C#的Form窗体中,如何画表?

使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)

C#使用Windows窗体实现链接跳转功能