Winforms 按钮右键单击视觉反馈(显示按钮处于按下状态)
Winforms Button Right-Click visual feedback (Show button in pushed state)
默认的 winforms Button 控件仅在用户左键单击按钮时将自身绘制在 "clicked state" 中。我需要 Button 控件在单击状态下绘制自身,而不管它是左键单击还是右键单击。我将如何做到这一点?
更具体地说,我知道我需要从 Button 派生一个扩展功能的控件,但我没有扩展 winforms 控件的功能或在 GDI+ 中绘图的经验。所以我有点傻眼了,我到底需要在那里做什么。
感谢您的帮助。
标准按钮控件使用私有 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 });
}
}
}
默认的 winforms Button 控件仅在用户左键单击按钮时将自身绘制在 "clicked state" 中。我需要 Button 控件在单击状态下绘制自身,而不管它是左键单击还是右键单击。我将如何做到这一点?
更具体地说,我知道我需要从 Button 派生一个扩展功能的控件,但我没有扩展 winforms 控件的功能或在 GDI+ 中绘图的经验。所以我有点傻眼了,我到底需要在那里做什么。
感谢您的帮助。
标准按钮控件使用私有 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 });
}
}
}