2011-08-10 11 views
1

ユーザーがリストボックスを右クリックしたときに、リストボックス内のすべての選択項目の選択を解除する機能があります。プロジェクトのすべてのリストボックスにこの関数を適用する方法はありますか?複数のフォームからアクセスされたC#グローバルイベント

私は別の方法ではなく、クラスを作るがありますかどうかを知り、クラスなどで機能を入れたい:これを行うには、各リストボックスのため

public class selectedListbox{ 
    private void setSelected(ListBox details){ 
    details.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listBoxDeselectAll); 
    } 

    private void listBoxDeselectAll(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Right) 
      { 
       ((ListBox)sender).ClearSelected(); 
      } 
     } 

} 

、その後:

selectedListBox h = new selectedListBox(); 
h.setSelected(listboxNameHere); 
+2

あなたはそれが役に立つかもしれませんListBoxから継承し、この機能を持つ新しいコントロールを作成します。 – Amy

+0

私はあなたがform.controlsコレクションを使うことができると思いますが、私はあなたに完全な答えを与えるのに十分な経験がありません。 check msdn – NirMH

+0

@ Inuyasha新しいコントロールを作成するための詳細を教えていただけますか?ありがとう –

答えて

2

多分拡張子+ラムダ?

public static class ListBoxSelectExtension 
{ 
    public static void SetSelected(this ListBox Me) 
    { 
     Me.MouseDown += 
      (sender, e) => 
      { 
       if (e.Button == MouseButtons.Right) 
        ((ListBox)sender).ClearSelected(); 
      }; 
    } 
} 

あなたは新しいクラスをインスタンス化することや、すべてのリストボックスは、派生クラスで持つことなく、次の操作を行うことができますこの方法:

MyListBox1.SetSelected(); 
MyListBox2.SetSelected(); 

など

+0

変数名に '@ this'を使用することもできます。IMOでは、(通常の方法として) – Sebastian

1

最も簡単な方法は、ListBoxから継承するクラスを作成することです:

あなたはあなたのCustを使用します標準リストボックスを使用するのと同じ方法で、リストボックスを作成します。

1
public class MyListBox : ListBox 
    { 
     public sListBox() : base() 
     { 
      MouseDown += new System.Windows.Forms.MouseEventHandler(this.MouseDownFired); 
     } 

     private void MouseDownFired(object sender, MouseEventArgs args) 
     { 
      if (args.Button == MouseButtons.Right) 
      { 
      SelectedItems.Clear(); 
      } 
     } 
関連する問題