如何解决是否可以为ToolstripComboBox菜单项添加快捷键?
问题1:
我试图在ToolStripMenuItem
中添加ToolStripComboBox
并为ToolStripMenuItem
添加了快捷键。它不起作用。你能把我摆放正确吗?
ToolStripMenuItem item1 = new ToolStripMenuItem (){Text = "A",ShortcutKeys=Keys.Control | Keys.D0};
ToolStripMenuItem item2 = new ToolStripMenuItem (){Text = "B",ShortcutKeys=Keys.Control | Keys.D1};
toolStripComboBox1.Items.Add(item1);
toolStripComboBox1.Items.Add(item2);
问题2: 如果我使用 KeyDown 事件实现快捷方式,则该事件在按右Alt键的同时触发两次。在第一个触发器中, KeyEventArgs 提供控制键的数据。因此,无法获得按下的键是Alt键还是Control键。我在下面使用了示例代码,
代码:
this.KeyPreview = true;
this.KeyDown += Form1_KeyDown;
private void Form1_KeyDown(object sender,KeyEventArgs e)
{
if(e.Control)
{
if(e.KeyCode == Keys.D0)
toolStripComboBox1.SelectedIndex = 0;
else if(e.KeyCode == Keys.D1)
toolStripComboBox1.SelectedIndex = 1;
}
}
谢谢。
解决方法
ToolStripComboBox
不支持开箱即用的快捷方式,因为其项没有单击事件。实际上,Items
属性是一个ObjectCollection
,因此您似乎并没有真正想到它会包含ToolStripMenuItem
的集合。添加ToolStripMenuItem
时,它会像其他任何对象一样对待。
如果快捷方式的目的是在单击/选择某项时执行某些操作,请考虑改用ToolStripDropDownButton。
示例:
var dropDownButton = new ToolStripDropDownButton() { Text = "Open me" };
toolStrip1.Items.Add(dropDownButton);
ToolStripMenuItem item1 = new ToolStripMenuItem() { Text = "A",ShortcutKeys = Keys.Control | Keys.D0 };
ToolStripMenuItem item2 = new ToolStripMenuItem() { Text = "B",ShortcutKeys = Keys.Control | Keys.D1 };
dropDownButton.DropDownItems.Add(item1);
dropDownButton.DropDownItems.Add(item2);
item1.Click += (obj,args) => MessageBox.Show("Item1 was clicked!");
item2.Click += (obj,args) => MessageBox.Show("Item2 was clicked!");
,
如另一个答案中所述,ToolStripComboBox
项目不支持开箱即用的键盘快捷键。如果由于某种原因(例如,您不想在单击时执行某些操作而只想选择项目),必须使用ToolStripComboBox
,则必须自己实现逻辑。
这是一个示例,该示例使用字典存储ComboBox的每个索引的快捷键。您可以根据需要调整它以存储值或文本而不是索引。
private Dictionary<Keys,int> comboBoxShortcutKeys = new Dictionary<Keys,int>();
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
this.KeyDown += (obj,args) =>
{
if (comboBoxShortcutKeys.ContainsKey(args.KeyData))
{
toolStripComboBox1.SelectedIndex = comboBoxShortcutKeys[args.KeyData];
}
};
}
private void AddComboBoxItems()
{
toolStripComboBox1.Items.Add("A");
comboBoxShortcutKeys.Add(Keys.Control | Keys.D0,0);
toolStripComboBox1.Items.Add("B");
comboBoxShortcutKeys.Add(Keys.Control | Keys.D1,1);
}
请注意,为了使快捷方式可以在表单上的任何位置使用,KeyPreview
属性需要设置为true,如上所示。或者,您可以覆盖ProcessCmdKey()
方法as explained here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。