我有一个简单的.NET应用程序,其中包含每个选项卡上的datargridviews。我已经将主菜单添加到窗体中,并使用标准属性为菜单项分配了快捷键。
上面显示的菜单项只是将单元格内容复制到剪贴板。这很好用,但在DGV的编辑模式下,Ctrl+C和其他标准热键不再起作用!我已将Form.KeyPreview属性设置为true,并尝试关闭我的Form对象的Handled属性,但仍然没有任何反应:
我错过了什么?我确定这应该是一些简单的东西。
我在 msdn帮助页面的评论上找到了一些信息:
需要注意的一件事是,如果表单中有文本框控件,则菜单项的ShortcutKeys将拦截该组合键,文本框将永远无法接收它,例如,如果您有一个粘贴(ctrl + v)ShortcutKey,则您的文本框永远不会接收粘贴命令。据微软称,这是设计如此。他们的解决方法是暂时清除菜单项的ShortCutKey属性以允许黏贴命令(很可能是在事件期间),然后在事件完成后重新设置它。 解决方法: 我最终通过从主表单的KeyDown事件处理程序调用菜单事件处理程序来解决问题,而不是打开和关闭菜单快捷方式。
editMenuItem = new ToolStripMenuItem("Copy", null, new System.EventHandler(onCopyCut_Click));
editMenuItem.ShortcutKeys = Keys.Control | Keys.C;
上面显示的菜单项只是将单元格内容复制到剪贴板。这很好用,但在DGV的编辑模式下,Ctrl+C和其他标准热键不再起作用!我已将Form.KeyPreview属性设置为true,并尝试关闭我的Form对象的Handled属性,但仍然没有任何反应:
void FileOrginizerForm_KeyDown(object sender, KeyEventArgs e)
{
...
if (gridView.CurrentCell.IsInEditMode)
e.Handled = false;
}
我错过了什么?我确定这应该是一些简单的东西。
我在 msdn帮助页面的评论上找到了一些信息:
需要注意的一件事是,如果表单中有文本框控件,则菜单项的ShortcutKeys将拦截该组合键,文本框将永远无法接收它,例如,如果您有一个粘贴(ctrl + v)ShortcutKey,则您的文本框永远不会接收粘贴命令。据微软称,这是设计如此。他们的解决方法是暂时清除菜单项的ShortCutKey属性以允许黏贴命令(很可能是在事件期间),然后在事件完成后重新设置它。 解决方法: 我最终通过从主表单的KeyDown事件处理程序调用菜单事件处理程序来解决问题,而不是打开和关闭菜单快捷方式。
void FileOrginizerForm_KeyDown(object sender, KeyEventArgs e)
{
if (!gridView.CurrentCell.IsInEditMode)
{
if (e.KeyData == (Keys.Control | Keys.Z))
{
this.editToolStripMenuItem.DropDownItems["Undo"].PerformClick();
}
else if (e.KeyData == (Keys.Control | Keys.Y))
{
this.editToolStripMenuItem.DropDownItems["Redo"].PerformClick();
}
else if (e.KeyData == (Keys.Control | Keys.X))
{
this.editToolStripMenuItem.DropDownItems["Cut"].PerformClick();
}
else if (e.KeyData == (Keys.Control | Keys.C))
{
this.editToolStripMenuItem.DropDownItems["Copy"].PerformClick();
}
else if (e.KeyData == (Keys.Control | Keys.V))
{
this.editToolStripMenuItem.DropDownItems["Paste"].PerformClick();
}
else if (e.KeyData == (Keys.Control | Keys.A))
{
this.selectToolStripMenuItem.DropDownItems["Select All"].PerformClick();
}
}
}
DataGridViewTextBoxColumn
(默认列类型) 单元格的编辑模式时,它会创建一个TextBox
控件并将其移动到单元格的区域。 此控件 (DataGridView.EditingControl
) 是具有焦点的控件。与表单上的任何其他TextBox
一样,此TextBox
的相同快捷键规则适用。 - TergiverToolStripMenuItem.ShortcutKeys
属性会覆盖TextBox
的标准快捷键。 - sergo