c# Onpaint没有启动
本文关键字:启动 Onpaint | 更新日期: 2023-09-27 18:12:46
我有这样的代码:
private void HandleGUI()
{
if (_currentForm == null)
{
navigationSideBar1.Visible = false;
pnlToolbar.Visible = false;
return;
}
if (_currentForm.ShowNavigationBar)
{
HandleNavigationButton(_currentForm);
}
btnSave.Visible = _currentForm.ShowSaveButton;
btnClose.Visible = _currentForm.ShowCloseButton;
btnSave.Paint += new PaintEventHandler(btnSave_Paint);
navigationSideBar1.Visible = _currentForm.ShowNavigationBar;
pnlToolbar.Visible = _currentForm.ShowToolBar;
btnSave.Refresh();
btnSave.Invalidate();
}
我注册了保存按钮(btnSave)的onpaint事件,但是这个事件没有被触发,即使我调用Refresh或Invalidate。这怎么可能呢?
编辑:保存按钮类是这样的:
public class SaveButton : ButtonX
{
public SaveButton()
{
this.Image = Properties.Resources.Save;
this.Text = "Opslaan";
this.Size = new Size(108, 39);
}
}
尝试添加一个常规的DevComponent按钮(即不是它的子类)到测试表单,看看它是否会触发它的Paint事件。他们可能已经公开了一个Paint事件(以便他们的接口与常规按钮匹配),但实际上并没有实现它。
将userpaint
设置为true
将触发onpaint
事件
this.SetStyle(ControlStyles.UserPaint, true);
From MSDN:
调用Invalidate方法不会强制同步绘制;若要强制同步绘制,请在调用Invalidate方法后调用Update方法。
你需要一个Update调用。现在,刷新只是Invalidate w/update children + update,所以理论上你被照顾到了。我所能想到的是,Windows不会调用Paint,除非它真的需要,即当窗体显示在UI上或写入图形设备(不可见窗口的"截图")。这两种情况都是这样吗?
看起来您没有在SaveButton
组件的构造函数中调用基类构造函数。
public class SaveButton : ButtonX
{
public SaveButton() : base()
...