在我的C#应用程序中,我有一个带有助记符的标签(例如& Path)和一个按钮。当用户按下标签的助记符(例如[Alt]然后[P])时,我想提升ButtonClick事件。但我没有找到任何标签事件来处理这种情况。使用按钮的OnFocus事件不是一个选项,因为用户可以使用[Tab]键进行导航。
那么有没有办法实现我的目标?
提前致谢。
答案 0 :(得分:3)
或者您可以使用以垃圾p
开头的内容命名您的按钮,然后将&
放在其前面,alt + p
将触发btn_Click
事件处理程序< / p>
编辑: 这样的事情怎么样:)
答案 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
,您将收到消息框