C # - добавление обработчика событий для всех экземпляров класса - PullRequest
3 голосов
/ 28 августа 2010

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

Большое спасибо

Ответы [ 4 ]

6 голосов
/ 28 августа 2010

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

Например:

var handler = new MyEventHandler(MyMethod);
obj1.MyEvent += handler;
obj2.MyEvent += handler;
obj3.MyEvent += handler;
3 голосов
/ 28 августа 2010

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

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

    }
2 голосов
/ 28 августа 2010

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

1 голос
/ 28 августа 2010

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

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