我有一个Windows窗体应用程序,其中包含一些用于F键的按钮。当您将鼠标放在按钮上时会变为灰色,当您单击它们时,它们会略微变亮。我想用F键击键来模仿这种行为......你会怎么做?
答案 0 :(得分:3)
将表单的KeyPreview
属性设置为true
,处理KeyDown
和KeyUp
事件,跟踪按下的功能键,并调用{{1每个键的按钮上的方法都会向下或向上移动。
然后,处理按钮的Invalidate
事件,如果其按键已关闭,请使用ButtonRenderer
class按钮,就像按下按钮一样。
答案 1 :(得分:1)
使用Button.PerformClick()。
答案 2 :(得分:1)
最后我实现了改变背景的按钮:
class FunctionButton : Button
{
private Color m_colorOver;
private bool m_isPressed;
public FunctionButton() : base()
{
m_isPressed = false;
}
protected override void OnGotFocus(EventArgs e)
{
OnMouseEnter(null);
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e)
{
if (!m_isPressed)
{
OnMouseLeave(null);
}
base.OnLostFocus(e);
}
protected override void OnMouseLeave(EventArgs e)
{
if (!Focused && !m_isPressed)
{
base.OnMouseLeave(e);
}
}
public void FunctionKeyPressed()
{
// Handle just the first event
if (!m_isPressed)
{
m_isPressed = true;
m_colorOver = FlatAppearance.MouseOverBackColor;
FlatAppearance.MouseOverBackColor = FlatAppearance.MouseDownBackColor;
OnMouseEnter(null);
PerformClick();
}
}
public void FunctionKeyReleased()
{
m_isPressed = false;
FlatAppearance.MouseOverBackColor = m_colorOver;
if (Focused)
{
OnMouseEnter(null);
}
else
{
base.OnMouseLeave(null);
}
}
}
这不是最干净的方式,但它工作正常。我想用更清洁,更优雅的风格来做更多这样的例子。
答案 3 :(得分:0)
SetCapture和ReleaseCapture可能会有效。