0

我正在尝试System.Drawing.Graphics在 C# Windows 窗体中使用绘制一个矩形,但如果不使用按钮单击事件,我似乎无法让它工作。

在线搜索发现我必须在表单本身中使用 Paint 或 Shown 事件,但是我的尝试没有成功。

我想Draw()在加载表单及其组件时运行我的方法。

public Form1()
{
    InitializeComponent();
    Draw(); //doesn't work
}

private void Draw()
{
    Graphics g = pictureBox.CreateGraphics();
    g.Clear(Color.White);
    Pen p = new Pen(Color.Black, 1);
    g.DrawRectangle(p, 0, 0, 50, 50);
}

private void ApproximateButton_Click(object sender, EventArgs e)
{
    Draw(); //works
}

实现这一目标的正确方法是什么?

4

2 回答 2

1

您可以覆盖 Form 的 OnLoad 事件来实现这一点,也可以重用 PaintEvent 参数。

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    using (Graphics g = e.Graphics)
    {
        g.Clear(Color.White);
        using (Pen p = new Pen(Color.Black, 1))
        {
            g.DrawRectangle(p, 0, 0, 50, 50);
        }
    }
}

编辑:添加使用语句来处理资源

于 2017-10-11T23:31:02.310 回答
0

你也应该很好地将你的函数放在 Form1 的Load事件下。

订阅Load活动后试试这个;

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    Draw();
}

private void Draw()
{
    Graphics g = pictureBox.CreateGraphics();
    g.Clear(Color.White);
    Pen p = new Pen(Color.Black, 1);
    g.DrawRectangle(p, 0, 0, 50, 50);
}

Load在构造函数之后调用事件。您的表单元素是在构造函数中创建的,因此您在尝试在同一函数中使用它们时遇到了一些问题。

于 2017-10-12T12:53:43.273 回答