Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Программно вызвать метод у EventHandler'а. Не выходит. / 14 сообщений из 14, страница 1 из 1
17.01.2014, 12:07
    #38529329
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
Всем привет!
Использую С# .Net 4.5.
Есть вот такой вот класс

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class MyButton
	{
		public MyButton()
		{
		}		

		public string Text { get; set; }

		public event EventHandler Click;
	}
	
	var buttonDoIt = new MyButton()
			{				
				Text ="Test";
			};

			buttonDoIt.Click += buttonDoIt_Click;
			
		void buttonDoIt_Click(object sender, EventArgs e)
		{
			//do it
		}
		


Как мне теперь программно выполнить "Click"?

Код: c#
1.
2.
3.
4.
		System.Reflection.BindingFlags bf = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic;
				System.Reflection.FieldInfo field = buttonDoIt.GetType().GetField("Click", bf);
				MulticastDelegate dlg = (MulticastDelegate)field.GetValue(buttonDoIt);
		


dlg создаётся, и дебаггер показывает что у него есть Method buttonDoIt_Click(object sender, EventArgs e)
Но дальше чёт дело не идёт. Как мне запустить этот метод?


Спасибо.
Извините если не туда запостил.
...
Рейтинг: 0 / 0
17.01.2014, 12:09
    #38529341
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
Либо напрямую buttonDoIt_Click, либо buttonDoIt.Click
...
Рейтинг: 0 / 0
17.01.2014, 12:18
    #38529363
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
wadmanЛибо напрямую buttonDoIt_Click, либо buttonDoIt.Click

Вопрос был не в этом. Мне из другого места нужно выполнить метод - напрямую не получится.

А buttonDoIt.Click это не метод а EventHandler которому метод УЖЕ присвоен.
...
Рейтинг: 0 / 0
17.01.2014, 12:23
    #38529375
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
nonameautorА buttonDoIt.Click это не метод а EventHandler которому метод УЖЕ присвоен.
И?
...
Рейтинг: 0 / 0
17.01.2014, 12:34
    #38529398
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
wadmannonameautorА buttonDoIt.Click это не метод а EventHandler которому метод УЖЕ присвоен.
И?

Что и?
buttonDoIt.Click и buttonDoIt.Click() не компилируется даже.
ожидается выражение типа buttonDoIt.Click += buttonDoIt_Click;
...
Рейтинг: 0 / 0
17.01.2014, 12:41
    #38529411
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
nonameautorbuttonDoIt.Click и buttonDoIt.Click() не компилируется даже.
Потому что ожидаются аргументы.
...
Рейтинг: 0 / 0
17.01.2014, 12:48
    #38529423
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
wadmannonameautorbuttonDoIt.Click и buttonDoIt.Click() не компилируется даже.
Потому что ожидаются аргументы.

buttonDoIt.Click(this, new EventArgs());

Тоже не проходит. Компилятор пишет что ожидается только += или -= .
...
Рейтинг: 0 / 0
17.01.2014, 12:54
    #38529432
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
Тогда либо buttonDoIt_Click либо
Код: c#
1.
2.
3.
ethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });



Но если кнопка настоящая, то PerformClick
...
Рейтинг: 0 / 0
17.01.2014, 12:56
    #38529437
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
wadmanТогда либо buttonDoIt_Click либо
Код: c#
1.
2.
3.
ethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });



Но если кнопка настоящая, то PerformClick

А я на кой ляд класс MyButton приводил в вопросе?!
Не настоящая она.
...
Рейтинг: 0 / 0
17.01.2014, 13:18
    #38529487
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
wadmanbuttonDoIt_Click очень плохо, у события может быть несколько подписчиков

Нужно в классе содержащем событие написать метод, его вызывающий и дёргать снаружи этот метод
...
Рейтинг: 0 / 0
17.01.2014, 13:23
    #38529500
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
ИзопропилwadmanbuttonDoIt_Click очень плохо, у события может быть несколько подписчиков

Нужно в классе содержащем событие написать метод, его вызывающий и дёргать снаружи этот метод

Вот так работает:

Код: c#
1.
dlg.Method.Invoke(dlg.Target, new object[] { this, new EventArgs() });



Вопрос закрыт.
...
Рейтинг: 0 / 0
17.01.2014, 13:24
    #38529504
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
ИзопропилwadmanbuttonDoIt_Click очень плохо, у события может быть несколько подписчиков

Нужно в классе содержащем событие написать метод, его вызывающий и дёргать снаружи этот метод

Класс я привёл выше. Как будет выглядеть метод вызывающий это событие не подскажете?
...
Рейтинг: 0 / 0
17.01.2014, 13:28
    #38529510
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
nonameautorКак будет выглядеть метод вызывающий это событие не подскажете?
например так:
Код: c#
1.
2.
3.
public void raiseClick(){
        Click(this, new EventArgs());
   }
...
Рейтинг: 0 / 0
17.01.2014, 13:35
    #38529526
nonameautor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно вызвать метод у EventHandler'а. Не выходит.
ИзопропилnonameautorКак будет выглядеть метод вызывающий это событие не подскажете?
например так:
Код: c#
1.
2.
3.
public void raiseClick(){
        Click(this, new EventArgs());
   }



Спасибо! Так конечно удобнее.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Программно вызвать метод у EventHandler'а. Не выходит. / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]