Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
142 个问题
假设我有一个树视图,并且特定节点有几个子节点,子节点有另一个节点等,或者特定节点没有子节点。就我而言,我已将对象分配给每个节点的标记属性。
现在,当用户选择任何节点并单击按钮时,我想将该节点及其所有子节点存储在剪贴板中。我尝试了一个代码示例,该示例正在工作,但 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
感谢您在 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);
}
//……
}
结果:
如果回复有帮助,请点击“接受答案”并点赞。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。