我有一个功能,当用户右键单击列表框时,取消选择列表框中的所有选定项目。有没有办法将此功能应用于项目中的所有列表框?

我想知道是否还有另一种方法,而不是创建一个类并将函数放在类中,等等:

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);

最佳答案

也许带有扩展名+ lambda?

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();


等等

关于c# - 从多种形式访问C#全局事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7006195/

10-10 07:22