所以我正在尝试创建一个新表单,绘制一个矩形,然后在表单上显示该矩形。我似乎无法让它显示出来。表单显示但矩形未绘制。
到目前为止,我有这个:
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();
}
答案 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())