我想在C#程序中加载表单。以下代码是否必须采用paint()
方法? InitializeComponent()
究竟做了什么?我问的是InitializeComponent()
方法究竟做了什么。基本上我不确定是否必须在OnPaint()
方法上进行覆盖,或者我是否可以在任何地方绘制我想要在表单上绘制内容的代码。 loadForm调用将在表单上绘制的DrawIt()
。但是该绘图的代码不是任何特定的OnPaint()
或Paint()
方法。
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void DrawIt()
{
System.Drawing.Graphics graphics = this.CreateGraphics();
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
50, 50, 150, 150);
graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
graphics.DrawRectangle(System.Drawing.Pens.Red, rectangle);
}
private void Form3_Load(object sender, EventArgs e)
{
DrawIt();
}
}
答案 0 :(得分:1)
InitializeComponent方法:
创建表单时,VS会创建两个包含ONE类的文件(只需查看部分类):
1)Form.cs,这是你放置代码的地方。
2)Form.Designer.cs,它是自动生成的分部类。当您在设计视图中将某个组件放在表单上时,VS会生成所需的代码,以便在此类的运行时构建该组件。
InitializeComponent
是Form.Designer.cs中自动生成的方法,它初始化您在表单上放置的组件。当你从构造函数中调用它时,你只是告诉它在构造表单对象时进行初始化。
OnPaint方法:
您应该将绘图代码放在OnPaint
方法中。无论何时需要,都可以使用.Net调用此方法。例如,如果您的窗口落在另一个窗口后面然后再次到达前面,您的图纸就会被清除!因此,再次调用此方法重新绘制图纸。
答案 1 :(得分:1)
private void DrawIt()
{
System.Drawing.Graphics graphics = this.CreateGraphics();
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
50, 50, 150, 150);
graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
graphics.DrawRectangle(System.Drawing.Pens.Red, rectangle);
this.Update();
}
protected override void OnPaint(PaintEventArgs e)
{
DrawIt();
base.OnPaint(e);
}
private void MainWindow_Paint(object sender, PaintEventArgs e)
{
//DrawIt();
}
我的测试结果是这样的: