C# — добавление обработчика событий для всех экземпляров класса

Мне нужно добавить неизвестное количество кнопок в форму в WPF (на самом деле это набор инструментов, элементы которого загружаются динамически). Я ищу способ сделать один обработчик событий для всех этих экземпляров. Это возможно? И это не совсем просто кнопки. Это класс, который наследует класс Button и имеет некоторые другие переменные-члены. Смогу ли я получить доступ к этим переменным в таком обработчике событий для каждого экземпляра. Если это помогает или как-то связано, я должен сказать, что не знаю, что такое делегаты в С#.

Огромное спасибо


person Auxiliary    schedule 28.08.2010    source источник


Ответы (4)


Вы можете прикрепить один и тот же обработчик событий ко многим событиям.

Например:

var handler = new MyEventHandler(MyMethod);
obj1.MyEvent += handler;
obj2.MyEvent += handler;
obj3.MyEvent += handler;
person Randolpho    schedule 28.08.2010

Как глупо с моей стороны отвечать на свой вопрос. Я понял это так: я мог бы добавить обработчик событий внутри самого класса для всех экземпляров. !! Вот код:

public class Tool_Button:Button{
        public String tool_name;
        public Tool_Button(String toolname) {
            this.Width = 32;
            this.Height = 32;
            this.BorderBrush = Brushes.Gray;
            tool_name = toolname;
            this.Background = new ImageBrush(new BitmapImage(new Uri(tool_name)));
            this.Click += new RoutedEventHandler(Tool_Button_Click);
        }

        void Tool_Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(tool_name);
        }

    }
person Auxiliary    schedule 28.08.2010
comment
Или вы могли бы просто переопределить OnClick. - person Mark Ingram; 27.06.2016

И да, вы должны иметь доступ к пользовательским свойствам производного класса кнопок, если эти методы/свойства общедоступны. Сигнатура метода для обработчика событий, скорее всего, включает Handler(object sender, EventArgs e) , и в этом случае вы можете привести sender к типу вашей производной кнопки.

person Eric    schedule 28.08.2010

Вы можете реализовать класс фабрики классов как для создания экземпляра, так и для настройки каждого из ваших экземпляров кнопок (в вашем случае добавьте ассоциацию обработчика событий) по мере необходимости. Это позволит вам написать код конфигурации в одном месте и гарантировать, что кнопки каждый раз создаются с правильной настройкой.

person Tahbaza    schedule 28.08.2010