【发布时间】:2016-08-12 14:35:57
【问题描述】:
我正在尝试将选定的树视图节点复制到剪贴板,以便将其粘贴到记事本中。这是我的代码,但它不起作用。
TreeNode selNode = (TreeNode)this.treeView1.SelectedNode;
Clipboard.SetData("TreeNode", selNode);
【问题讨论】:
我正在尝试将选定的树视图节点复制到剪贴板,以便将其粘贴到记事本中。这是我的代码,但它不起作用。
TreeNode selNode = (TreeNode)this.treeView1.SelectedNode;
Clipboard.SetData("TreeNode", selNode);
【问题讨论】:
记事本对 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;
}
}
【讨论】:
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; }
【讨论】:
如果您希望其他程序识别剪贴板上的内容,则需要使用可识别的数据格式(例如纯文本或位图)字符串参数,并将树节点格式化为该格式(例如,如果您选择文本,您应该传递一个“字符串”作为剪贴板数据,也许是 TreeNode.Text 值)。请参阅System.Windows.Forms.DataFormats 了解不同的预定义类型。
【讨论】: