按下按钮调用_Paint

时间:2011-06-17 21:20:10

标签: c# .net winforms user-controls

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

现在我遇到的问题是无论出于何种原因边框样式都不支持3d边框......

因此,当按钮未被取消时,它应具有Border3dStyle.Raised外观。然后当它被按下时,它应该具有Border3dStyle.Sunken外观。

我通过覆盖OnPaint方法获得了Border3dStyle.Raised。像这样......

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

如何在触发click事件时调用UserInkControl_Paint?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你可以调用“myControl.Refresh()”。它将重绘整个控件。

答案 2 :(得分:0)

您正在寻找Invalidate method

答案 3 :(得分:0)

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.
}