C# – 表单构造函数中的代码未执行

前端之家收集整理的这篇文章主要介绍了C# – 表单构造函数中的代码未执行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
C#相对较新;希望我只是忽略了一些简单的事情.

我有一个名为’Exercise1’的表单,其中包含一个名为’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’和’balloon’在构造函数上方创建为全局变量,用于表单上的其他方法. ‘paper’和’balloon’都在构造函数中在表单上定义的其他方法中初始化.

无论出于何种原因,命令

paper.Clear(Color.White);

balloon.Display(paper);

哪个应该清除图片框并显示一个红色椭圆,不执行(至少可见).是什么赋予了?

更新:
我想我会喜欢这个网站…你们很快!
@Nitesh:练习1的构造函数是从另一个表单调用的.代码如下:

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

@Sean Dunford:是的,是的.
@RBarryYoung:玩了一下,但没有运气.什么命令触发Exercise1的Form_Load事件?

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

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

感谢您的帮助!

解决方法

你不能在构造函数中绘图.要进行正确的绘图,您需要在屏幕上显示该表格.您可以尝试使用Shown事件进行渲染(但是在重绘表单时可能会丢失).

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

如果您尝试进行自定义绘图(在Paint事件之外),您将面临随机变为空白的风险,或者当您调整/最小化您的表单时,您的绘图可能会消失.

猜你在找的C#相关文章