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);
    }
}

c# Onpaint没有启动

尝试添加一个常规的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()
...