按 Alt + B 触发第一个按钮虽然按钮2具有相同的访问密钥。
如何在第一个 Alt + B 和焦点按钮2上设置焦点按钮1在第二个 Alt + B 上没有处理keydown事件或类似事件?
private void button1_Click(object sender, EventArgs e)
{
System.Media.SystemSounds.Beep.Play();
}
private void button2_Click(object sender, EventArgs e)
{
System.Media.SystemSounds.Hand.Play();
}
答案 0 :(得分:1)
您可以覆盖ProcessMnemonic
以在按下助记符时自定义按钮的行为。处理助记符时,当您检测到控件处于应根据助记符执行操作的状态时,返回true
,否则返回false
。
在下面的实现中,控件首先检查助记符是否属于控件,然后如果它不是Focuded
则调用Focus
并返回true,否则(它的焦点或者它不应该处理助记符)返回false。这样,它允许在具有相同助记符的控件之间进行焦点移动:
using System.Windows.Forms;
public class MyButton:Button
{
protected override bool ProcessMnemonic(char charCode)
{
if (this.UseMnemonic && this.Enabled && this.Visible &&
Control.IsMnemonic(charCode, this.Text))
{
if (!this.Focused)
{
this.Focus();
return true;
}
}
return false;
}
}