问题1:我尝试在ToolStripComboBox中添加ToolStripMenuItem并为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键还是控制键。我使用了下面的示例代码,
代码:
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;
}
}提前谢谢。
发布于 2020-08-11 08:07:47
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!");发布于 2020-08-11 08:27:24
正如另一个答案所解释的,ToolStripComboBox项不支持开箱即用的键盘快捷键。如果您由于某种原因而不得不使用ToolStripComboBox (例如,您不想对click执行某些操作,只想选择项),那么您必须自己实现这个逻辑。
下面是一个使用字典存储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()方法如前所述。
https://stackoverflow.com/questions/63353804
复制相似问题