2013-05-05 22 views
5

我有一個表格,我正在使用ShowDialog其中包含幾個文本框,標籤和一個按鈕。我遇到的問題是在表單本身之前繪製文本框,並繪製其他控件。控件不是同時繪製的

我重寫OnPaint方法,我不知道這可能會造成問題:

protected override void OnPaint(PaintEventArgs e) 
{ 
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Black, ButtonBorderStyle.Solid); 
    base.OnPaint(e); 
} 

這只是一個輕微的延遲,但它是可見的和憤怒的。謝謝。

形式是雙緩衝的方式。

編輯:我已指出的問題是,該表格沒有FormBorderStyle這一事實。將FormBorderStyle設置爲Sizable,則不會發生此問題。不過請注意,有FormBorderStyle.None作爲我的邊框樣式是必要的,所以我還沒有找到解決方案。

+1

您可以發佈有關的標籤,文本框和按鈕的繪製所有相關的代碼? – JosephGarrone 2013-05-05 12:38:21

+0

實際上,父元素在渲染自己之前調用每個子控件的渲染方法。這是默認行爲。也許你可以在表單加載完成後顯示對話框。 – Saravanan 2013-05-05 12:39:31

+0

通過Visual Studio設計器添加了所有控件,因此我沒有觸及這些控件的繪圖。 – 2013-05-05 12:42:25

回答

1

嘗試添加該到對話框形式:

protected override CreateParams CreateParams 
    { 
     get 
     { 
      // Activate double buffering at the form level. All child controls will be double buffered as well. 

      CreateParams cp = base.CreateParams; 

      cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 

      return cp; 
     } 
    } 
+0

這工作謝謝! – 2013-06-14 17:08:40