我有一个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