私はメモ帳に貼り付けることができるように、クリップボードに選択したツリービューノードをコピーしようとしています。ここに私のコードはありますが、うまくいきません。ツリービューノードをコピー
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;
}
}
あなたは他のプログラムがクリップボードに何があるかを認識したい場合は、(例えば、プレーンテキスト、またはビットマップ)文字列パラメータを認識し、データ形式を使用して、フォーマットする必要がありツリーノードをその形式に変換します(たとえば、テキストを選択した場合、クリップボードデータとして 'string'、おそらくTreeNode.Text値)を渡す必要があります。定義済みのさまざまなタイプについては、System.Windows.Forms.DataFormatsを参照してください。
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; }
は、私は非常に感謝します。よく働く。 – Jeremy
atleastは答えを受け入れるのはどうですか? – Crank