C# 画一个长方形
由于某些原因,当我运行程序时,矩形没有显示。但是代码运行时没有任何错误。我做错了什么 (我正在使用csc.exe编译代码,我正在用记事本++编写它) 图纸代码:C# 画一个长方形,c#,winforms,drawing,C#,Winforms,Drawing,由于某些原因,当我运行程序时,矩形没有显示。但是代码运行时没有任何错误。我做错了什么 (我正在使用csc.exe编译代码,我正在用记事本++编写它) 图纸代码: Graphics g = myform.CreateGraphics(); Pen selPen = new Pen(Color.Blue); g.DrawRectangle(selPen, 10, 10, 50, 50); g.Dispose(); 完整代码: using System; using System.Windows.F
Graphics g = myform.CreateGraphics();
Pen selPen = new Pen(Color.Blue);
g.DrawRectangle(selPen, 10, 10, 50, 50);
g.Dispose();
完整代码:
using System;
using System.Windows.Forms;
using System.Drawing;
public class Hello1
{
public static void Main()
{
Form myform = new Form();
myform.Text = "Main Window";
myform.Size = new Size(640, 400);
myform.FormBorderStyle = FormBorderStyle.FixedDialog;
myform.StartPosition = FormStartPosition.CenterScreen;
Graphics g = myform.CreateGraphics();
Pen selPen = new Pen(Color.Blue);
g.DrawRectangle(selPen, 10, 10, 50, 50);
g.Dispose();
myform.ShowDialog();
}
}
您可以在
form.OnPaint
方法覆盖中或仅在form.Paint
事件处理程序中绘制表单。因此,您需要创建一个从
表单继承的新类
:
public class MyForm : Form
{
}
将以下代码添加到表单中:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
using (Pen selPen = new Pen(Color.Blue))
{
g.DrawRectangle(selPen, 10, 10, 50, 50);
}
}
或者,您可以订阅myform.Paint
事件,如下所示:
myform.Paint += (o, e) => {
Graphics g = e.Graphics;
using (Pen selPen = new Pen(Color.Blue))
{
g.DrawRectangle(selPen, 10, 10, 50, 50);
}
};
这是因为表单在显示时被绘制(在调用
ShowDialog
的情况下),这会删除所绘制的矩形
您必须绘制矩形:
- 在表单显示之后。例如,在窗体的
显示事件中,但请注意,当窗体再次绘制时,矩形将消失(例如,当您最小化/最大化窗体时)
- 或者更好,在绘制表单时(在
事件中,请参见Dmitry的答案)Paint
public static void Main()
{
Form myform = new Form();
myform.Text = "Main Window";
myform.Size = new Size(640, 400);
myform.FormBorderStyle = FormBorderStyle.FixedDialog;
myform.StartPosition = FormStartPosition.CenterScreen;
myform.Show(); // -> First Show
// -> Then Draw
Graphics g = myform.CreateGraphics();
Pen selPen = new Pen(Color.Blue);
g.DrawRectangle(selPen, 10, 10, 50, 50);
g.Dispose();
}
这样,您可以看到矩形。但除非在其OnPaint事件处理程序中添加绘图零件,否则它不会保留在那里。当您尝试最小化或移动包含矩形的一侧时,或当操作系统需要绘制窗体时,绘制的矩形将消失。谢谢,但我似乎不知道将代码放在何处。如果你也给我看完整的代码,那就容易多了。@LucasJørgensen只要用答案中的最后一个代码片段替换你的绘图代码(
myform.Paint+=…
)。@LucasJørgensen