【问题标题】:Copy TreeView Node复制 TreeView 节点
【发布时间】:2016-08-12 14:35:57
【问题描述】:

我正在尝试将选定的树视图节点复制到剪贴板,以便将其粘贴到记事本中。这是我的代码,但它不起作用。

    TreeNode selNode = (TreeNode)this.treeView1.SelectedNode;
    Clipboard.SetData("TreeNode", selNode);

【问题讨论】:

    标签: .net treeview copy


    【解决方案1】:

    记事本对 Winforms TreeNode 类一无所知。请改用 Clipboard.SetText():

        private void treeView1_KeyDown(object sender, KeyEventArgs e) {
            if (e.KeyData == (Keys.Control | Keys.C)) {
                if (treeView1.SelectedNode != null) {
                    Clipboard.SetText(treeView1.SelectedNode.Text);
                }
                e.SuppressKeyPress = true;
            }
        }
    

    【讨论】:

    • 非常感谢。效果很好。
    【解决方案2】:

    XAML:

    <TreeView>
      <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
          <EventSetter Event="Loaded" Handler="ItemLoaded"/>
        </Style >
      </TreeView.ItemContainerStyle>
    </TreeView>
    

    C#:

    protected void ItemLoaded(object sender, EventArgs e)
    {
      if (sender is TreeViewItem)
      {
        TreeViewItem item = sender as TreeViewItem;
    
        if (item.CommandBindings.Count == 0)
        {
          CommandBinding copyCmdBinding = new CommandBinding();
          copyCmdBinding.Command = ApplicationCommands.Copy;
          copyCmdBinding.Executed += CopyCmdBinding_Executed;
          copyCmdBinding.CanExecute += CopyCmdBinding_CanExecute;
          item.CommandBindings.Add(copyCmdBinding);
        }
    }
    
    private void CopyCmdBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
      if (sender is TreeViewItem)
        if ((sender as TreeViewItem).Header is MyClass)
          Clipboard.SetText(((sender as TreeViewItem).Header as MyClass).MyValue);
    }
    
    private void CopyCmdBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
      e.CanExecute = false;
      if (sender is TreeViewItem)
        if ((sender as TreeViewItem).Header is MyClass)
          e.CanExecute = true;
    }
    

    【讨论】:

    • 我喜欢这个……它非常适合我。非常感谢。
    【解决方案3】:

    如果您希望其他程序识别剪贴板上的内容,则需要使用可识别的数据格式(例如纯文本或位图)字符串参数,并将树节点格式化为该格式(例如,如果您选择文本,您应该传递一个“字符串”作为剪贴板数据,也许是 TreeNode.Text 值)。请参阅System.Windows.Forms.DataFormats 了解不同的预定义类型。

    【讨论】:

      猜你喜欢
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      相关资源
      最近更新 更多