1

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

リストビューが追加されたときにイベントを設定するのに苦労しています。

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

リストビューを追加するボタンがありますが、これは正常に機能します。これが概念的すぎて正確ではない場合は、お詫び申し上げます。

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

2 に答える 2

1

コードでルーチンを作成しておく必要があります。

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;
  newListView.DragDrop += listView_DragDrop;
  newListView.DragEnter += listView_DragEnter;

  flowPanel.Controls.Add(newListView);
}

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

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

newListView.DragEnter += (s, de) => de.Effect = DragDropEffects.Copy;
于 2012-01-27T02:10:17.793 に答える
0

s も動的に -=削除する場合は、イベントの配線を必ず解除してください。ListView

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

ただし、あるコントロールを同じクラスの別のコントロールと区別する方法が必要です。これを行う 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;
        .....
    }  
}     
于 2012-01-27T02:27:19.043 に答える