2012-04-19 58 views
1

我有一个WinForm,我忽略了OnPaint,这个表格是一个MDI父母。但是,即使WinForm与孩子一起显示,OnPaint也不会被触发。我试图使用InvalidateUpdate但不会触发OnPaint eather?OnPaint未触发?

我试过Paint事件,但它在这里一样吗?

有什么想法?

+0

这实际上是不可能的,OnPaint没有被触发,你甚至可以看到表单...所以还有其他的错误。可以提供一些代码? – Tigran 2012-04-19 13:35:13

+0

您还没有确定不正确的行为,因为如果在应用程序运行时您可以在窗体上看到控件,我可以保证您正在触发OnPaint事件。 – 2012-04-19 15:33:47

回答

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); 
    } 
} 
+0

然后,我如何禁用base.OnPaint(...)? '//base.OnPaint(e);' – Rafael 2014-02-24 13:11:01