单击调用绘画按钮(_Paint on)

本文关键字:Paint on 调用 绘画 按钮 单击 | 更新日期: 2023-09-27 17:59:21

所以我在.NET 2.0中创建了一个自定义用户控件,这个用户控件基本上是一个组合的用户控件(上面有一张带标签的图片)。它的功能基本上就像一个按钮,可以点击等等。

现在我的问题是,无论出于什么原因,边框样式都不支持3d边框。。。

因此,当按钮被取消点击时,它应该具有Border3dStyle.凸起的外观。然后当它被按下时,它应该有Border3dStyle.Sunken的外观。

我通过重写OnPaint方法获得了Border3dStyle.Wraised。就像这样…

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        ControlPaint.DrawBorder3D(e.Graphics, this.ClientRectangle, Border3DStyle.Raised);
    }

当点击按钮时,我想调用其他方法——这就是我认为可能有效的方法。

        private void UserInkControl_Paint(object sender, PaintEventArgs e)
    {
        Rectangle borderRectangle = this.ClientRectangle;
        ControlPaint.DrawBorder3D(e.Graphics, borderRectangle, Border3DStyle.Sunken);
    }

我在加载事件中注册了它

        private void UserInkControl_Load(object sender, EventArgs e)
    {
        this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserInkControl_Paint);
    }

在触发单击事件时,如何调用UserInkControl_Paint?

单击调用绘画按钮(_Paint on)

Click事件不适用于您尝试执行的操作,因为只有在按住鼠标按钮然后释放后才会调用该特定事件。您应该使用MouseDown事件将布尔属性(例如_isDown)设置为true,然后调用.Refresh();使用MouseUp事件设置_isDown = false;,然后也只调用.Refresh()

Paint事件中,检查_isDown属性并使用适当的参数调用DrawBorder3D方法。

public void UserInkControl_Click(object sender, EventArgs ea)
{
   UserInkControl.Refresh ();  // Causes repainting immediately
   // or
   UserInkControl.Invalidate ();  // Invalidates the whole painting surface, 
   //so when the message loop catches up, it gets repainted.
   // There is also an overload of Invalidate that
   // lets you invalidate a particular part of the button,
   // So only this area is redrawn.  This can reduce flicker.
}

您可以调用"myControl.Refresh()"。它将重新绘制整个控件。

您正在寻找Invalidate方法。