绘制事件序列



我从Form3运行程序。为什么程序先执行Form3 Picture1_Paint而不是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();
}

Form.Show() 调用仅启动使窗口可见的过程。 在方法完成并且执行重新进入消息循环之前,您实际上看不到它。 之后,如果不需要执行任何其他重要操作,则传递 Paint 事件。 绘画顺序是从后到前。

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

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

最新更新