创建矩形并显示在新窗体上

Create rectangle and display on new form

所以我正在尝试创建一个新表单,绘制一个矩形,然后在表单上显示该矩形。我似乎无法让它显示出来。表格显示了,但是没有画出矩形。

到目前为止我有这个:

private void btnLayout_Click(object sender, EventArgs e)
{
    Form form = new Form();
    form.Text = "Design";
    using (Graphics g = form.CreateGraphics())
    {
        Pen pen = new Pen(Color.Black, 2);
        Brush brush = new SolidBrush(Color.AliceBlue);
        g.DrawRectangle(pen, 100, 100, 100, 200);
        pen.Dispose();
    }
    form.Show();
}

出于某种原因,我无法在尚未显示的表单上添加矩形,但如果您在显示表单之后放置代码,它就可以工作。

private void btnLayout_Click(object sender, EventArgs e)
        {
            Form form = new Form();

            form.Text = "Design";

            form.Show();

            using (Graphics g = form.CreateGraphics())
            {
                Pen pen = new Pen(Color.Black, 2);
                Brush brush = new SolidBrush(Color.AliceBlue);

                g.DrawRectangle(pen, 100, 100, 100, 200);

                pen.Dispose();
            }
}

显示表格,然后绘制矩形。

即:将 form.Show() 调用移至上方:

using (Graphics g = form.CreateGraphics())

您应该在表单的 Paint 事件中在您的表单上绘制,否则如果某些东西使您的表单重新绘制,例如最小化并恢复或移动另一个 window,您的绘制将会消失你的 window.

例子

private void button1_Click(object sender, EventArgs e)
{
    var f = new Form();
    f.Paint += (se, pe) =>
    {
        var r = new Rectangle(10, 10, 100, 100);
        pe.Graphics.FillRectangle(Brushes.AliceBlue, r);
        using (var pen = new Pen(Color.Black, 2))
            pe.Graphics.DrawRectangle(pen, r);
    };
    f.Show();
}

备注

  • 您可以使用 Brushes.AliceBlue 而不是 new SolidBrush(Color.AliceBlue)
  • 如果您出于任何原因创建了一个新的 SolidBrush,请不要忘记处理它。
  • using 块中创建和使用一次性对象。这样他们会在使用结束时超出范围后自动处理。
  • 语句f.Paint += (se, pe) =>{/*...*/}等同于 f.Paint += f_Paint; 然后有了这样的方法 void f_Paint(object sender, PaintEventArgs e) {/*...*/} .