C # глобальное событие принято из нескольких форм - PullRequest
1 голос
/ 10 августа 2011

У меня есть функция, которая отменяет выбор всех выбранных элементов в списке, когда пользователь щелкает правой кнопкой мыши по списку.Есть ли способ применить эту функцию ко всем спискам в моем проекте?

Я хочу знать, есть ли другой способ, не создать класс и поместить функцию в класс и т. Д .:

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

Ответы [ 3 ]

2 голосов
/ 10 августа 2011

может с расширением + лямбда?

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

и т.д.

1 голос
/ 10 августа 2011
   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();
          }
        }
1 голос
/ 10 августа 2011

Самый простой способ - создать класс, наследующий от ListBox:

public class CustomListBox : ListBox
{
    public void SetSelected()
    {
        this.MouseDown += new MouseEventHandler(this.DeselectAll);
    }

    public void UnsetSelected()
    {
        this.MouseDown -= new MouseEventHandler(this.DeselectAll);
    }

    private void DeselectAll(object sender, MouseEventArgs e)
    {
        // ...
    }
}

Вы будете использовать свой пользовательский список таким же образом, как вы бы использовали стандартный список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...