在新表单上创建矩形并显示

时间:2016-07-22 18:31:22

标签: c# winforms gdi+

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

到目前为止,我有这个:

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();
}

3 个答案:

答案 0 :(得分:2)

你应该在表格的Paint事件中在你的表格上画画,否则如果某些东西使你的表格重新粉刷,你的画将会消失,例如最小化并恢复或移动窗户上方的另一个窗口。

示例

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) {/*...*/}

答案 1 :(得分:0)

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

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();
            }
}

答案 2 :(得分:0)

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

即:移动上面的form.Show()电话:

using (Graphics g = form.CreateGraphics())