Как вызвать делегат... :(
От: wraithik Россия  
Дата: 08.07.13 11:30
Оценка:
Есть панель, у нее есть событие MouseClick, к нему привязан делегат.
Каким образом его можно вызвать программно?
Re: Как вызвать делегат... :(
От: Doc Россия http://andrey.moveax.ru
Дата: 08.07.13 11:53
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Каким образом его можно вызвать программно?


Вы не поверите:
http://msdn.microsoft.com/ru-ru/library/ms173172.aspx

PS: Может все же стоит разобраться как на C# писать и как гуглом пользоваться
Re: Как вызвать делегат... :(
От: Sinatr Германия  
Дата: 08.07.13 14:57
Оценка: :)
Здравствуйте, wraithik, Вы писали:

W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>Каким образом его можно вызвать программно?

Попахивает хаком. Чего именно хочется добиться?
---
ПроГLамеры объединяйтесь..
Re: Как вызвать делегат... :(
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.07.13 18:30
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>Каким образом его можно вызвать программно?
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onmouseclick.aspx — оно?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Как вызвать делегат... :(
От: wraithik Россия  
Дата: 08.07.13 19:13
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Здравствуйте, wraithik, Вы писали:


W>>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>>Каким образом его можно вызвать программно?

S>Попахивает хаком. Чего именно хочется добиться?


Задача простая.
Есть несколько панелей в столбик на форме.
На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.

Сорри за глупые вопросы, но очень давно ничего не писал на чем то отличном от 1С. А тут прижало написать мобильный фронт.
Re[2]: Как вызвать делегат... :(
От: wraithik Россия  
Дата: 08.07.13 19:15
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, wraithik, Вы писали:


W>>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>>Каким образом его можно вызвать программно?
S>http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onmouseclick.aspx — оно?

Нет. Вернее сложно, надо будет наследовать контрол, выносить метод в паблик. И на форме уже будет на панель, а какая-то MyPanel.

Хочется чего то типа myPanel.Click(null, null)
Re[3]: Как вызвать делегат... :(
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.07.13 07:26
Оценка: +1
Здравствуйте, wraithik, Вы писали:

W>Задача простая.

W>Есть несколько панелей в столбик на форме.
W>На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.
Тогда вам проще всего прекратить ерунду и подписывать тот же делегат на специальное событие, которое вы уже и будете дёргать.
Это если вам реально надо иметь Panel, а не, скажем, кнопку. Вы уверены, что правильно выбрали контрол?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Как вызвать делегат... :(
От: wraithik Россия  
Дата: 09.07.13 13:14
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, wraithik, Вы писали:


W>>Задача простая.

W>>Есть несколько панелей в столбик на форме.
W>>На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.
S>Тогда вам проще всего прекратить ерунду и подписывать тот же делегат на специальное событие, которое вы уже и будете дёргать.
S>Это если вам реально надо иметь Panel, а не, скажем, кнопку. Вы уверены, что правильно выбрали контрол?

Да. Т.к. панель является контейнером для нескольких контролов.
Сперва как раз кнопку и использовал.
Re[3]: Как вызвать делегат... :(
От: Sinatr Германия  
Дата: 09.07.13 13:33
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Есть несколько панелей в столбик на форме.

W>На каждой висит свой ОнКлик (не хочу я один делегат развешивать и по сендеру смотреть, кого ткнули). По ним также сделано хождение стрелками вверх-вниз. При нажатии "Ввод" на клавиатуре, я должен съмуолировать клик по текущей панели. Есть массив панелей и номер текущей панели.

Проще всего переместить код из OnClick в метод и просто вызывать его из OnClick или когда-еще там понадобится. Или написать аналог PerformClick. Или в обработчике собитыя не использовать ни sender, ни EventArg, тогда можно вызвать обработчик как-то так panel1_OnClick(null, new EventArgs());.

Или я не понял в чем проблема.

Почему все-таки Panel? Что там такого внутри? Картинка и текст? Это и RadioButton может. Если контента слишком много, то может правильнее было взять TabControl?
---
ПроГLамеры объединяйтесь..
Re[5]: Как вызвать делегат... :(
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.07.13 08:15
Оценка:
Здравствуйте, wraithik, Вы писали:


W>Да. Т.к. панель является контейнером для нескольких контролов.

W>Сперва как раз кнопку и использовал.
А почему вас не устраивает Click? По спецификации, он даже правильнее — его, в отличие от MouseClick, могут вызывать и события клавиатуры.
И тогда можно просто сделать InvokeOnClick(panel, e);
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Как вызвать делегат... :(
От: vvlad.net  
Дата: 10.07.13 09:38
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>Каким образом его можно вызвать программно?

Вызвать метод к которому привязан делегат.
Re: Как вызвать делегат... :(
От: Аноним  
Дата: 10.07.13 12:13
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>Каким образом его можно вызвать программно?

Видимо вы не стой стороны смотрите
Лучше делайте примерно так:

public interface IAskUserNameForm {
  string UserName {get;set;}
  event Action Close;
  event Action Confirm;
};


Одна из реализаций UI
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 и т.п.
Re: Как вызвать делегат... :(
От: Dmitry_83  
Дата: 11.07.13 10:36
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>Каким образом его можно вызвать программно?
А если так:

public event ClickEventHandler Clicked = null;

private void OnClick(ClickEventHandler e)
{
if (this.Clicked != null)
{
this.Clicked (this, null);
}
}
Re: Как вызвать делегат... :(
От: Dmitry_83  
Дата: 11.07.13 10:37
Оценка:
Здравствуйте, wraithik, Вы писали:

W>Есть панель, у нее есть событие MouseClick, к нему привязан делегат.

W>Каким образом его можно вызвать программно?
А вообще создай метод ОнКлик и привязывайся к нему)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.