默认winforms按钮控件仅在用户左键单击按钮时以“单击状态”绘制自己。我需要Button控件在点击状态下绘制自己,而不管它是左键单击还是右键单击。我怎么做到这一点?Winforms按钮右键单击视觉反馈(按推入状态显示)
更具体地说,我知道我需要从Button中派生出一个控件,它扩展了功能,但是我没有扩展WinForms控件的功能或在GDI +中绘图的经验。所以我有点傻眼了我到底需要做些什么。
感谢您的帮助。
默认winforms按钮控件仅在用户左键单击按钮时以“单击状态”绘制自己。我需要Button控件在点击状态下绘制自己,而不管它是左键单击还是右键单击。我怎么做到这一点?Winforms按钮右键单击视觉反馈(按推入状态显示)
更具体地说,我知道我需要从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 });
}
}
}
这可能会在框架的未来版本打破。 – Maarten
@Maarten可能但不太可能。许多基于反思的东西可能在未来的版本中突破。但功能至少从.NET 2.0到.NET 4.6.2是一样的。我不确定.NET 1.0和1.1。 –
@Maarten作为另一种选择,您可以依靠使用'ButtonRenderer'或'VisualStyleRenderer'自己绘制控件。 –
但要注意,这种行为是针对Windows的风格一致性...... –