绘制事件序列

时间:2014-01-09 16:08:52

标签: c# winforms

我从Form3运行程序。为什么程序首先执行Picture1_Paint Form3 Picture1_Paint而不是Form1 private void Form3_Load(object sender, EventArgs e) { ss = new Form1(); ss.Show(); // Here Form1 is loaded, but its Picture1_paint is not executed FootingWidth.Text = ss.richTextBox9.Text; pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); pictureBox1.Refresh(); } private void Form1_Load_1(object sender, EventArgs e) { richTextBox1.Text = 1.0.ToString(); richTextBox2.Text = 0.403.ToString(); richTextBox3.Text = 0.0.ToString(); pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); pictureBox1.Refresh(); } ,如何更改序列?

{{1}}

1 个答案:

答案 0 :(得分:2)

Form.Show()仅调用启动使窗口可见的过程。在方法完成并执行重新进入消息循环之前,您实际上无法看到它。如果没有其他重要的事情需要完成,那么将传递Paint事件。绘画顺序是背靠背的。

强制通过调用Refresh()来运行pictureBox1的Paint事件。这不是必需的,它会自动获取Paint事件。但代码肯定会让pb的Paint事件在任何其他事件之前运行。只需删除Refresh()调用即可。

如果有任何理由强制进行绘制,则使用Invalidate()方法告诉Windows该窗口应该重新绘制。您可以使用Update()方法强制立即传递Paint事件。