Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用“删除”按钮删除树视图项_C#_Wpf_Keypress_Treeviewitem - Fatal编程技术网

C# 使用“删除”按钮删除树视图项

C# 使用“删除”按钮删除树视图项,c#,wpf,keypress,treeviewitem,C#,Wpf,Keypress,Treeviewitem,我希望通过按键盘上的delete(删除)按钮,能够从TreeItem中删除子节点。我正在使用SelectedItem来尝试这样做 目前,我正在我的代码隐藏中使用一个KeyDown事件: private void Tree_One_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Delete) class.deleteNodeOnKeyPress(); } 从此处,我的程序调用一个函数,该函数应执行删除操

我希望通过按键盘上的delete(删除)按钮,能够从
TreeItem
中删除子节点。我正在使用
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);
}
这就是我尝试过的,我不知道为什么它不起作用。我以前在按键时遇到过问题。也许有人能给我指出正确的方向

如果您需要更多代码,请告诉我

更新:我现在使用的是
e.Key==Key.Delete
,仍然不会影响任何更改

以下是尝试
Tree.Items.Remove(Tree.SelectedItem)后出现的编译器错误

  • 无法在此上下文中使用属性或索引器“System.Collections.ObjectModel.Collection.Items”,因为get访问器不可访问

  • “System.Collections.ObjectModel.Collection.Items”由于其保护级别而不可访问

  • “System.Collections.ObjectModel.ObservableCollection”不包含“SelectedItem”的定义,并且找不到接受“System.Collections.ObjectModel.ObservableCollection”类型的第一个参数的扩展方法“SelectedItem”(是否缺少using指令或程序集引用?


  • 看起来真正的问题在于
    Tree.Remove(SelectedItem)。我建议执行
    treeView1.Items.Remove(treeView1.SelectedItem)
    其中treeView1是您的
    TreeView
    控件。

    我知道这个问题很老了,但我在尝试做同样的事情时遇到了它(在检测到用户按delete键时删除TreeView节点)。不确定为什么要尝试从Items集合中删除,但从Nodes集合中删除SelectedNode应该可以正常工作。有一件事没有提到,SelectedItem(或SelectedNode)可以为null,因此您可能需要对此进行测试

        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
    
    private void Tree_One_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Delete)
        {
            if (Tree.SelectedNode != null)
            {
                Tree.Nodes.Remove(Tree.SelectedNode);
            }
        }
    }
    

    我已经切换并更新了代码。该节点仍未从树中删除。是否尝试过调试它?它甚至进入了KeyDown功能吗?是的,它正确地通过了这两个功能,但节点保持不变。
    deleteNodeOnKeyPress
    必须是静态的吗?我想如果你的代码不是像你所能改变的那样,你的代码会更干净。deleteNodeOnKeyPress()
    只是
    deleteNodeOnKeyPress()
    还有什么是
    SelectedItem
    ?它是您在其他地方定义的对象吗?