Здравствуйте, wraithik, Вы писали:
W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат. W>Каким образом его можно вызвать программно?
Здравствуйте, Sinatr, Вы писали:
S>Здравствуйте, wraithik, Вы писали:
W>>Есть панель, у нее есть событие MouseClick, к нему привязан делегат. W>>Каким образом его можно вызвать программно?
S>Попахивает хаком. Чего именно хочется добиться?
Задача простая.
Есть несколько панелей в столбик на форме.
На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.
Сорри за глупые вопросы, но очень давно ничего не писал на чем то отличном от 1С. А тут прижало написать мобильный фронт.
Здравствуйте, wraithik, Вы писали:
W>Задача простая. W>Есть несколько панелей в столбик на форме. W>На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.
Тогда вам проще всего прекратить ерунду и подписывать тот же делегат на специальное событие, которое вы уже и будете дёргать.
Это если вам реально надо иметь Panel, а не, скажем, кнопку. Вы уверены, что правильно выбрали контрол?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, wraithik, Вы писали:
W>>Задача простая. W>>Есть несколько панелей в столбик на форме. W>>На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели. S>Тогда вам проще всего прекратить ерунду и подписывать тот же делегат на специальное событие, которое вы уже и будете дёргать. S>Это если вам реально надо иметь Panel, а не, скажем, кнопку. Вы уверены, что правильно выбрали контрол?
Да. Т.к. панель является контейнером для нескольких контролов.
Сперва как раз кнопку и использовал.
Здравствуйте, wraithik, Вы писали:
W>Есть несколько панелей в столбик на форме. W>На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.
Проще всего переместить код из OnClick в метод и просто вызывать его из OnClick или когда-еще там понадобится. Или написать аналог PerformClick. Или в обработчике собитыя не использовать ни sender, ни EventArg, тогда можно вызвать обработчик как-то так panel1_OnClick(null, new EventArgs());.
Или я не понял в чем проблема.
Почему все-таки Panel? Что там такого внутри? Картинка и текст? Это и RadioButton может. Если контента слишком много, то может правильнее было взять TabControl?
W>Да. Т.к. панель является контейнером для нескольких контролов. W>Сперва как раз кнопку и использовал.
А почему вас не устраивает Click? По спецификации, он даже правильнее — его, в отличие от MouseClick, могут вызывать и события клавиатуры.
И тогда можно просто сделать InvokeOnClick(panel, e);
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, wraithik, Вы писали:
W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат. W>Каким образом его можно вызвать программно?
Вызвать метод к которому привязан делегат.
Re: Как вызвать делегат... :(
От:
Аноним
Дата:
10.07.13 12:13
Оценка:
Здравствуйте, wraithik, Вы писали:
W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат. W>Каким образом его можно вызвать программно?
Видимо вы не стой стороны смотрите
Лучше делайте примерно так:
public class MyPange : ... , IAskUserNameForm{
public MyPange() {
...
// FormClosed+=(s,a)=> Close.Signal();
Disposing+=(s,a)=> Close.Signal(); // или другие завязки на close
button1.OnClick+=(s,a)=> Confirm.Signal();
}
...
public string UserName { get { return textbox1.Text; } set { textbox1.Text=value; } }
public event Action Close;
public event Action Confirm;
}
// чисто для удобства
public static class ActionExtension {
public static void Signal(this Action a) { if (a!=null) a(); }
...
}
Таким способом вы убъёте больше зайцев чем кажется.
Вобщем смотрите MVC, MVP и т.п.
Здравствуйте, wraithik, Вы писали:
W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат. W>Каким образом его можно вызвать программно?
А если так:
Здравствуйте, wraithik, Вы писали:
W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат. W>Каким образом его можно вызвать программно?
А вообще создай метод ОнКлик и привязывайся к нему)