2010-12-30 19 views
0

私はメモ帳に貼り付けることができるように、クリップボードに選択したツリービューノードをコピーしようとしています。ここに私のコードはありますが、うまくいきません。ツリービューノードをコピー

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

答えて

11

メモ帳は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; 
     } 
    } 
+0

は、私は非常に感謝します。よく働く。 – Jeremy

+2

atleastは答えを受け入れるのはどうですか? – Crank

0

あなたは他のプログラムがクリップボードに何があるかを認識したい場合は、(例えば、プレーンテキスト、またはビットマップ)文字列パラメータを認識し、データ形式を使用して、フォーマットする必要がありツリーノードをその形式に変換します(たとえば、テキストを選択した場合、クリップボードデータとして 'string'、おそらくTreeNode.Text値)を渡す必要があります。定義済みのさまざまなタイプについては、System.Windows.Forms.DataFormatsを参照してください。

1

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; 
} 
関連する問題