如何使用标签的助记符来提升Button Click事件?

时间:2011-04-20 09:12:44

标签: c# button event-handling label

在我的C#应用​​程序中,我有一个带有助记符的标签(例如& Path)和一个按钮。当用户按下标签的助记符(例如[Alt]然后[P])时,我想提升ButtonClick事件。但我没有找到任何标签事件来处理这种情况。使用按钮的OnFocus事件不是一个选项,因为用户可以使用[Tab]键进行导航。

那么有没有办法实现我的目标?

提前致谢。

3 个答案:

答案 0 :(得分:3)

或者您可以使用以垃圾p开头的内容命名您的按钮,然后将&放在其前面,alt + p将触发btn_Click事件处理程序< / p>

编辑: 这样的事情怎么样:) enter image description here

答案 1 :(得分:1)

标签上的助记符只关注具有下一个TabIndex的控件,而这就是它所做的一切。您无法使用它直接调用任何内容(例如按钮的单击事件)。

您可以使用此行为的知识来模拟您想要实现的目标。我们的想法是在您的表单上放置一个轻量级,可聚焦的控件,其中TabIndex紧跟在标签之后但位于不可见的位置(如左上角之外)。然后按照隐藏控件的焦点事件做你想做的事。

这是一个完整的独立示例。在这种情况下,隐藏控件将是一个复选框。

using System;
using System.Drawing;
using System.Windows.Forms;

public class MyForm : Form
{
    public MyForm()
    {
        targetLabel = new Label()
        {
            Text = "&Label",
            TabIndex = 10,
            AutoSize = true,
            Location = new Point(12, 17),
        };
        // you don't need to keep an instance variable
        var hiddenControl = new CheckBox()
        {
            Text = String.Empty,
            TabIndex = 11,                    // immediately follows target label
            TabStop = false,                  // prevent tabbing to control
            Location = new Point(-100, -100), // put somewhere not visible
        };
        hiddenControl.GotFocus += (sender, e) =>
        {
            // simulate clicking on the target button
            targetButton.Focus();
            targetButton.PerformClick();
        };
        targetButton = new Button()
        {
            Text = "&Click",
            TabIndex = 20,
            AutoSize = true,
            Location = new Point(53, 12),
        };
        targetButton.Click += (sender, e) =>
        {
            MessageBox.Show("Target Clicked!");
        };
        dummyButton = new Button()
        {
            Text = "&Another Button",
            TabIndex = 0,
            AutoSize = true,
            Location = new Point(134, 12),
        };
        dummyButton.Click += (sender, e) =>
        {
            MessageBox.Show("Another Button Clicked!");
        };

        this.Controls.Add(targetLabel);
        this.Controls.Add(hiddenControl);
        this.Controls.Add(targetButton);
        this.Controls.Add(dummyButton);
    }
    private Label targetLabel;
    private Button targetButton;
    private Button dummyButton;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

答案 2 :(得分:-1)

您没有指定项目的类型(Winforms / WPF),但我认为所有这些类型的解决方案都是相同的:
您应该将表单上的KeyPreview设置为true,并将KeyUp事件处理程序中的按键检查​​为nelow:

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.P && e.Alt == true)
        {
            MessageBox.Show("Got it");
        }
    }

在此示例中,如果按Alt + P

,您将收到消息框