1

我有一个 WinForm ,我在其中覆盖OnPaint,这个表单是MDI 父级OnPaint但是,即使WinForm与孩子一起显示,也不会触发?我试过用InvalidateUpdate不触发OnPainteather?

我已经尝试过 Paint 事件,但它在这里是一样的吗?

任何想法?

4

1 回答 1

2

当您设置Form.IsMdiContainer时,它实际上只是MdiClient向表单添加了一个控件。您的子窗体实际上显示在 MdiClient 控件中,而不是窗体本身。正在引发表单的 Paint 事件,但 MdiClient 停靠在表单中,因此您看不到它。您需要改为访问 MdiClient 的绘制事件。

public partial class Form1 : Form
{
    public Form1() {
        InitializeComponent();

        mdiClient = Controls[0] as MdiClient;

        if (mdiClient != null) {
            mdiClient.Paint += OnMdiClientPaint;
        }
    }

    private MdiClient mdiClient;

    private void OnMdiClientPaint(object sender, PaintEventArgs e) {
        e.Graphics.FillRectangle(Brushes.Blue, mdiClient.ClientRectangle);
    }
}
于 2012-04-19T13:40:54.693 回答