2015-11-11 7 views
1

В C#, как наилучшим образом добавить дополнительное свойство к вызову вызова кнопки?Как добавить дополнительный параметр к кнопке EventHandler?

Вот код EventHandler:

button.Click += new EventHandler(button_Click); 

Вот код button_Click:

private void button_Click(object sender, EventArgs e) 
{ 

} 

Если я хочу, чтобы добавить параметр PropertyGrid к параметрам функции button_Click, как это лучший способ сделать это?

Я хочу сделать это как button.Click код в функции, которая имеет параметр PropertyGrid, и в функции button_Click, мне нужно установить PropertyGrid выбранный объект. Это устанавливается только при нажатии кнопки button.Click.

Если я установил тег кнопки как объект PropertyGrid, как я могу получить этот объект тега в коде button_Click?

Событие button_Click вызывается из объекта, а отправитель - это объект, который не является кнопкой.

Могу ли я, пожалуйста, помочь с кодом?

+2

Зачем вы хотите это сделать? Щелчок по кнопке не имеет этой перегрузки. Но вы можете реализовать метод, который берет 'PropertyGrid', который вы можете вызывать из' button_Click'. –

+0

Это невозможно, так как сигнатура обработчика события уже определена в типе кнопки. В вашем коде, почему вы не могли просто вызвать новый PropertyGrid() внутри обработчика событий? Или, если фактическая сетка свойств для использования связана с нажатой кнопкой, она может быть связана в другом месте (например, с использованием свойства button.Tag) – michaelb

+0

Зачем вам нужно добавить дополнительный параметр? Какую проблему он решает? – Maarten

ответ

4

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

Вы тривиально обходите это, используя выражение лямбда, оно может захватить значение аргумента PropertyGrid и передать его методу. Примерно:

private void SubscribeClick(PropertyGrid grid) { 
     button.Click += new EventHandler(
      (sender, e) => button_Click(sender, e, grid) 
     ); 
    } 
+0

Спасибо. Это код, над которым я работал, и он работает правильно. – user3736648

+0

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

+0

Наверное, богиня пытается найти его. Это вопрос [regex]. –

Смежные вопросы