C#-未执行窗体构造函数中的代码



C#相对较新;希望我只是忽略了一些简单的事情。

我有一个名为"练习1"的表格,里面有一个叫做"drawingArea"的图片框和几个按钮。Exercise1构造函数的代码如下:

public Exercise1()
{
InitializeComponent();
paper = drawingArea.CreateGraphics();
balloon = new Balloon("redBalloon", Color.Red, drawingArea.Width / 2, 
drawingArea.Height / 2, 30);
paper.Clear(Color.White);
balloon.Display(paper);   
}
...

"paper"one_answers"balloop"被创建为构造函数上方的全局变量,用于表单上的其他方法。"paper"one_answers"balloop"都在表单上定义的其他方法的构造函数中初始化。

无论出于何种原因,命令

paper.Clear(Color.White);

balloon.Display(paper);

它应该清除图片框并显示一个红色椭圆,不要执行(至少在视觉上)。什么东西?

更新:我想我会喜欢这个网站。。。你们快
@Nitesh:Exercise1的构造函数是从另一种形式调用的。代码如下:

private void button1_Click(object sender, EventArgs e)
{
int exSelector = (int)numericUpDown1.Value;
switch (exSelector)
{
case 1:
Exercise1 form1 = new Exercise1();
form1.Show();
break;
...

@肖恩·邓福德:是的,是的。
@RBarryYoung:有点玩这个,但运气不好。哪个命令触发练习1的Form_Load事件

更新:更改后的代码按预期工作:

public Exercise1()
{
InitializeComponent();
paper = drawingArea.CreateGraphics();
drawingArea.BackColor = Color.White;
drawingArea.Paint += new PaintEventHandler(this.drawingArea_Paint);
balloon = new Balloon("redBalloon", Color.Red, drawingArea.Width / 2, drawingArea.Height / 2, 30); 
}
private void drawingArea_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
balloon.Display(e.Graphics);
} 
...

谢谢你的帮助!

不能在构造函数中进行绘图。要进行正确的绘图,您需要在屏幕上显示表单。您可以尝试使用Shown事件进行渲染(不过,当重新绘制表单时,这可能会丢失)。

通常,最好的方法是在构造函数中设置所需的任何标志,然后使用表单的Paint事件来完成所有绘制。稍后,当您需要重新绘制某些内容时,设置需要渲染的任何状态,使表单无效(这会导致Paint事件),然后您可以重新绘制新状态。

如果你试图进行自定义绘图(在Paint活动之外),你将面临随机变空的风险,或者当你调整大小/最小化表单时,你的绘图可能会失败。

您在构造函数中使用Graphics,这意味着您只在纸上绘制一次,构造函数之后发生的任何原因的重绘都将以原始方式绘制drawingArea。尝试将PaintEventHandler添加到drawingArea,然后调用内部气球。显示器(e.Graphics);

public Exercise1()
{
InitializeComponent();
balloon = new Balloon("redBalloon", Color.Red, drawingArea.Width / 2, 
drawingArea.Height / 2, 30);

drawingArea.Paint += new PaintEventHandler(drawingArea_Paint);
}
void drawingArea_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
baloon.Display(e.Graphics);
}

您应该重写表单OnPaint事件处理程序。通过这样做,您可以获得将重新绘制图纸和气球区域的图形上下文。

最新更新