powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Программно вызвать метод у EventHandler'а. Не выходит.
14 сообщений из 14, страница 1 из 1
Программно вызвать метод у EventHandler'а. Не выходит.
    #38529329
nonameautor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Использую С# .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
Программно вызвать метод у EventHandler'а. Не выходит.
    #38529341
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо напрямую buttonDoIt_Click, либо buttonDoIt.Click
...
Рейтинг: 0 / 0
Программно вызвать метод у EventHandler'а. Не выходит.
    #38529363
nonameautor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanЛибо напрямую buttonDoIt_Click, либо buttonDoIt.Click

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

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

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

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

Тоже не проходит. Компилятор пишет что ожидается только += или -= .
...
Рейтинг: 0 / 0
Программно вызвать метод у EventHandler'а. Не выходит.
    #38529432
Фотография 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
...
Рейтинг: 0 / 0
Программно вызвать метод у EventHandler'а. Не выходит.
    #38529437
nonameautor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Программно вызвать метод у EventHandler'а. Не выходит.
    #38529487
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanbuttonDoIt_Click очень плохо, у события может быть несколько подписчиков

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

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

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

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



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

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

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



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


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