2012-01-27 9 views
1

私は実行時にフローパネルにリストビューを作成します。これは後でドラッグアンドドロップされたファイルを受け入れます。その理由は、これらがフォルダとして機能してユーザがダブルクリックしてコンテンツを表示するウィンドウを取得するようにするためです。リストビューのフローパネル

私のリストビューのイベントを設定する際に問題が発生しました。

追加されたリストビューごとに動的に(MouseDoubleClickやDragDropなど)いくつかのイベントを作成するにはどうすればよいですか?これらのイベントの両方に対して1つの関数を作成し、listview1、listview2、listviewXを使用できますか?

リストビューを追加しているボタンがあり、うまくいきます。それがあまりにも概念的で、十分正確でないならば、私は謝罪します。それはあなたのワイヤー、あなたのルーチンで

private void listView_DragDrop(object sender, DragEventArgs e) { 
    // do stuff 
} 

private void listView_DragEnter(object sender, DragEventArgs e) { 
    // do stuff 
} 

してからアップ:あなたはすでにあなたのコードで作成されたルーチンを持っている必要があります

private void addNewWOButton_Click(object sender, EventArgs e) 
     { 
      ListView newListView = new ListView(); 
      newListView.AllowDrop = true; 
      flowPanel.Controls.Add(newListView); 
     } 

答えて

1

private void addNewWOButton_Click(object sender, EventArgs e) 
{ 
    ListView newListView = new ListView(); 
    newListView.AllowDrop = true; 
    newListView.DragDrop += listView_DragDrop; 
    newListView.DragEnter += listView_DragEnter; 

    flowPanel.Controls.Add(newListView); 
} 

かを確認する必要がありますどのListViewコントロールがイベントを起動しているかを知る必要がある場合は、「送信者」は誰ですか。

また、単純なもののためにラムダ関数を使用することができます。

newListView.DragEnter += (s, de) => de.Effect = DragDropEffects.Copy; 
+0

です。今日までにその送信者の議論を使ったことはありません。今私が持っています。ありがとう。 'code'ListこのListView =送信者をListViewとして表示します。 thisListView.Items.Add(file); – ikathegreat

0

はちょうどあなたが動的ListView Sを削除する場合-=でイベントを無線化することを確認してください。

質問の残りの半分に答えるには、ハンドラの署名を持つ任意のソースからのイベントに対して、単一のハンドラを使用できます。ハンドラー本体では、sender引数をチェックして、どのコントロールがイベントを発生させたかを判断するだけです。

ただし、同じクラスの別のコントロールから1つのコントロールを指定する方法が必要です。これを行う1つの方法は、コントロールを作成するときに各コントロールのNameプロパティを確実に設定することです。例えば、,newListView.Name = "FilesListView"

次に、イベントハンドラで何かを行う前に、送信者を確認してください。

private void listView_DragDrop(object sender, DragEventArgs e) { 
    ListView sendingListView = sender as ListView; 
    if(sendingListView == null) { 
     // Sender wasn't a ListView. (But bear in mind it could be any class of 
     // control that you've wired to this handler, so check those classes if 
     // need be.) 
     return; 
    } 
    switch(sendingListView.Name) { 
     case "FilesListView": 
      // do stuff for a dropped file 
      break; 
     case "TextListView": 
      // do stuff for dropped text 
      break; 
     ..... 
    } 
}  
+0

awすてきなおかげ。私がやっていることについての素晴らしいこと、私はユーザーが動的に(まだ)削除することはできません。バージョン2.0を待つ必要があります。 – ikathegreat

関連する問題