Winform:如何使用 Tag 属性在剪贴板中复制 treenode 集合

Jiale Xue - MSFT 41,271 信誉分 Microsoft 供应商
2024-04-01T06:42:22.01+00:00

假设我有一个树视图,并且特定节点有几个子节点,子节点有另一个节点等,或者特定节点没有子节点。就我而言,我已将对象分配给每个节点的标记属性。

现在,当用户选择任何节点并单击按钮时,我想将该节点及其所有子节点存储在剪贴板中。我尝试了一个代码示例,该示例正在工作,但 Tag 属性为 null。

因此,请告知如何使用标签属性将节点存储在剪贴板中?

我测试了这段代码。

    private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (treeView1.SelectedNode != null)
                {
                    TreeNode paste = treeView1.SelectedNode;
                    IDataObject data = Clipboard.GetDataObject();
                    if (data.GetDataPresent(typeof(TreeNode)))
                    {
                        TreeNode element = (TreeNode)data.GetData(typeof(TreeNode));
                        TreeNode tn = new TreeNode();
                        tn.Text = element.Text;
                        tn.Name = element.Name;
                        foreach (TreeNode temp in element.Nodes)
                        {
                            TreeNode newTn = new TreeNode(temp.Text);
                            tn.Nodes.Add(newTn);
                        }
                        if (paste.Parent != null)
                        {
                            paste.Parent.Nodes.Insert(paste.Index + 1, tn);

                        }
                        else
                        {
                            this.treeView1.Nodes.Insert(paste.Index + 1, tn);
                        }
                    }
                }
            }



            private void cutToolStripMenuItem_Click(object sender, EventArgs e)
            {
                TreeNode node = this.treeView1.SelectedNode;
                if (node != null)
                {
                    Clipboard.SetDataObject(node, true);
                    this.treeView1.Nodes.Remove(node);
                }

            }

请告诉我一个易于在剪贴板中存储节点及其标签属性的方法。谢谢

Note:此问题总结整理于: Winform: How to copy treenode collection in clipboard with Tag property

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
142 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 46,961 信誉分 Microsoft 供应商
    2024-04-01T08:25:26.9966667+00:00

    感谢您在 Microsoft Q&A 论坛中发布此问题。

    根据您的代码片段,请尝试添加以下两行代码:

    tn.Tag = element.Tag;

    newTn.Tag = temp.Tag;

    代码应该如下所示:

    if (data.GetDataPresent(typeof(TreeNode)))  
    {  
         TreeNode element = (TreeNode)data.GetData(typeof(TreeNode));  
         TreeNode tn = new TreeNode();  
         tn.Text = element.Text;  
         tn.Name = element.Name;  
         tn.Tag = element.Tag;  
         foreach (TreeNode temp in element.Nodes)  
         {  
               TreeNode newTn = new TreeNode(temp.Text);  
               newTn.Tag = temp.Tag;  
               tn.Nodes.Add(newTn);  
         }  
    
         //……  
    
    }  
    

    结果:

    40342-test1.gif


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助