我的表单中有一个树视图。它有一个与之关联的上下文菜单条。 上下文菜单条具有以下项目:- 创建新节点、创建子节点、重命名节点、删除节点。 我有所有这些项目的快捷方式。
我的问题是,当我创建一个新节点(为节点输入文本)时,如果我按 Ctrl+S(创建子节点的快捷键),它会触发“创建子节点”的单击事件物品。
上下文菜单条中的所有项目都会发生这种情况。
现在, 1.当我仍在编辑或创建节点时,如何停止快捷键触发? 2. 在编辑或创建节点期间是否需要处理任何属性或事件来阻止快捷键触发相应事件?
需要尽快解决此问题。
谢谢。
根据您输入新节点名称的位置,您可以订阅树视图或树视图项的
PreviewKeyDown
事件。
要防止按下某个按键触发快捷方式,您可以将handled属性设置为true。以下示例假设您在文本框中输入新节点的名称。
private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
{
if (sender is TextBox && (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl))
{
e.Handled = true;
}
}
这个想法是,防止任何快捷方式的发生,只要它们来自文本框。由于仅处理控制键,因此不应吞掉您可能想要输入名称的任何其他键。
我意识到这是一个老问题,但我最近也遇到了这个问题。使用击键对我来说不是一个选择,因为从树中删除节点的快捷方式是删除键,并且我需要删除键在编辑节点名称时为用户工作。
对我有用且相当干净的解决方案是关闭树视图的
BeforeLabelEdit
事件中的所有菜单项快捷方式,然后在 AfterLabelEdit
事件中重新分配它们。
private void tvwLibrary_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
mnuTreeViewDelete.ShortcutKeys = Keys.None;
}
和
private void tvwLibrary_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
mnuTreeViewDelete.ShortcutKeys = Keys.Delete;
}