【问题标题】:Delete TreeViewItem with Delete Button使用删除按钮删除 TreeViewItem
【发布时间】:2013-08-06 19:51:29
【问题描述】:

我希望能够通过按下键盘上的删除按钮从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);后的编译器错误

  1. The property or indexer 'System.Collections.ObjectModel.Collection<System...TreeViewItem>.Items' cannot be used in this context because the get accessor is inaccessible

  2. 'System.Collections.ObjectModel.Collection<System...TreeViewItem>.Items' is inaccessible due to its protection level

  3. '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?)

【问题讨论】:

    标签: c# wpf keypress treeviewitem


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我知道这个问题相当老了,但我在尝试做同样的事情时遇到了它(在检测到用户按下 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);
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我已经切换并更新了我的代码。该节点仍未从树中删除。
        • 你试过调试吗?它甚至进入了KeyDown功能吗?
        • 是的,它通过了两个函数,但节点保持不变。
        • deleteNodeOnKeyPress 必须是静态的吗?我认为如果不是你的代码会更干净,因为你可以将 class.deleteNodeOnKeyPress() 更改为 deleteNodeOnKeyPress()
        • 另外,SelectedItem 是什么?它是您在其他地方定义的对象吗?
        猜你喜欢
        • 1970-01-01
        • 2023-01-05
        • 2016-01-03
        • 2019-04-06
        • 2013-05-20
        • 2014-04-18
        • 1970-01-01
        • 2016-07-15
        • 1970-01-01
        相关资源
        最近更新 更多