Winforms按钮右键单击视觉反馈(按下状态时显示按钮)

时间:2017-03-17 01:05:43

标签: c# .net winforms button right-click

默认winforms按钮控件仅在"点击状态下绘制自己"当用户左键单击按钮时。无论是左键单击还是右键单击,我都需要Button控件在单击状态下绘制自己。我该如何做到这一点?

更具体地说,我知道我需要从Button派生一个控件来扩展功能,但我没有扩展winforms控件的功能或绘制GDI +的经验。所以,我在那里确实需要做的事情,我有点傻眼。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

标准按钮控件使用私有SetFlag方法将按钮设置为向下和按下模式。你也可以自己做。我在下面的代码中做到了:

using System.Windows.Forms;
public class MyButton : Button
{
    protected override void OnMouseDown(MouseEventArgs e)
    {
        SetPushed(true);
        base.OnMouseDown(e);
        Invalidate();
    }
    protected override void OnMouseUp(MouseEventArgs e)
    {
        SetPushed(false);
        base.OnMouseUp(e);
        Invalidate();
    }
    private void SetPushed(bool value)
    {
        var setFlag = typeof(ButtonBase).GetMethod("SetFlag", 
            System.Reflection.BindingFlags.Instance |
            System.Reflection.BindingFlags.NonPublic);
        if(setFlag != null)
        {
            setFlag.Invoke(this, new object[] { 2, value });
            setFlag.Invoke(this, new object[] { 4, value });
        }
    }
}