我希望能够通过按键盘上的删除按钮从TreeViewItem
删除子节点。我正在使用SelectedItem
来尝试这样做。
目前我在代码隐藏中使用KeyDown
事件:
private void Tree_One_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
class.deleteNodeOnKeyPress();
}
从那里我的程序调用一个应该执行删除操作的函数:
public static void deleteNodeOnKeyPress()
{
Tree.Items.Remove(Tree.SelectedItem);
}
这是我尝试过的,对于我的生活,我不知道为什么它不起作用。我以前遇到过keyPress
事件的问题。也许有人可以指出我正确的方向。
如果您需要更多代码,请告诉我们!
更新:我现在正在使用e.Key == Key.Delete
,但仍然不会影响任何更改。
尝试Tree.Items.Remove(Tree.SelectedItem);
The property or indexer 'System.Collections.ObjectModel.Collection<System...TreeViewItem>.Items' cannot be used in this context because the get accessor is inaccessible
'System.Collections.ObjectModel.Collection<System...TreeViewItem>.Items' is inaccessible due to its protection level
'System.Collections.ObjectModel.ObservableCollection<System...TreeViewItem>' does not contain a definition for 'SelectedItem' and no extension method 'SelectedItem' accepting a first argument of type 'System.Collections.ObjectModel.ObservableCollection<System...TreeViewItem>' could be found (are you missing a using directive or an assembly reference?)
答案 0 :(得分:1)
function detectspecialkeys(e) {
var evtobj = window.event ? event : e
if (evtobj.altKey || evtobj.ctrlKey || evtobj.shiftKey)
alert("you pressed one of the 'Alt', 'Ctrl', or 'Shift' keys")
}
document.onkeyup = detectspecialkeys
答案 1 :(得分:0)
似乎真正的问题在于Tree.Remove(SelectedItem);
。我建议您使用treeView1.Items.Remove(treeView1.SelectedItem);
,其中treeView1是您的TreeView
控件。
答案 2 :(得分:0)
我知道这个问题相当陈旧,但我在尝试做同样的事情时遇到了它(在检测到用户按下Delete键时删除了一个TreeView节点)。不确定为什么要尝试从Items集合中删除,但从Nodes集合中删除SelectedNode应该可以正常工作。没有提到的一件事是SelectedItem(或SelectedNode)可以为null,因此您可能希望测试它。
private void Tree_One_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
if (Tree.SelectedNode != null)
{
Tree.Nodes.Remove(Tree.SelectedNode);
}
}
}