使用相同的访问键聚焦按钮而不是触发第一个

时间:2016-08-07 09:23:00

标签: c# winforms focus controls keyboard-shortcuts

enter image description here

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();
}

1 个答案:

答案 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;
    }
}