我有一個WinForm,我忽略了OnPaint
,這個表格是一個MDI父母。但是,即使WinForm
與孩子一起顯示,OnPaint
也不會被觸發。我試圖使用Invalidate
和Update
但不會觸發OnPaint
eather?OnPaint未觸發?
我試過Paint事件,但它在這裏一樣嗎?
有什麼想法?
我有一個WinForm,我忽略了OnPaint
,這個表格是一個MDI父母。但是,即使WinForm
與孩子一起顯示,OnPaint
也不會被觸發。我試圖使用Invalidate
和Update
但不會觸發OnPaint
eather?OnPaint未觸發?
我試過Paint事件,但它在這裏一樣嗎?
有什麼想法?
當您設置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);
}
}
然後,我如何禁用base.OnPaint(...)? '//base.OnPaint(e);' – Rafael 2014-02-24 13:11:01
這實際上是不可能的,OnPaint沒有被觸發,你甚至可以看到表單...所以還有其他的錯誤。可以提供一些代碼? – Tigran 2012-04-19 13:35:13
您還沒有確定不正確的行爲,因爲如果在應用程序運行時您可以在窗體上看到控件,我可以保證您正在觸發OnPaint事件。 – 2012-04-19 15:33:47