2012-04-19 81 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