创建矩形并显示在新窗体上
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) {/*...*/}
.
所以我正在尝试创建一个新表单,绘制一个矩形,然后在表单上显示该矩形。我似乎无法让它显示出来。表格显示了,但是没有画出矩形。
到目前为止我有这个:
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) {/*...*/}
.