Другие языки программирования и технологии

Как в C# вызвать событие из кода программы?

Нужно, чтоб при вводе текста в ComboBox и выполнении некоторых команд в обработчике TextChanged происходило событие DropDown. Как его вызвать из кода?
Ромка Егоров
Ромка Егоров
1 972
Ты не правильно понимаешь событийную модель. Когда раскрывается в комбобоксе список, происходит событие DropDown.Тоесть вызывается делегат, присвоенный этому событию, а точнее вызывается вызывается ф-ция, на которую ссылается делегат. Так что тебе мешает сразу написать, что при таких условиях вызовется нужная ф-ци. А не городить вызов события, которое вызовет делегат, который в свою очередь вызовет нужную ф-цию. То есть событие DropDown происходит после того и из-за того, что раскрылся список комбобокса, а не из-за вызова события раскрывается комбобокс.
Самое разумное решение твоей проблемы следующее.
Написать ф-цию, которая делает то, что происходит при событии DropDown.
void SomeFunc()
{
....
}
Определить делегат, который будет указывать на эту ф-цию.
public delegat void SomeDelegat();

SomeDelegat d=new SomeDelegat(SomeFunc);
При вводе текста в ComboBox и выполнении некоторых команд в обработчике TextChanged в нужный момент пишешь
d(); //или так d.Invoke();
В таком случае в нужный момент отработает твоя ф-ция. Но на время её работы программа остановится. Чтоб ф-ция отработала независимо от хода выполнения программы, нужно делегат вызвать асинхронно, то есть в отдельном потоке.
d.BeginInvoke(null,null);

А если тебе просто нужно программно раскрыть комбобокс, то напиши
comboBox1.DroppedDown = true;
Комбобокс раскроется и тогда произойдёт событие DropDown.
Альберт Гарданов
Альберт Гарданов
9 759
Лучший ответ
ниже ветка на правильном форуме :-)
Вам нужно выполнить один и тот же код в двух разных обработчиках? Вынесете его в отдельный метод и вызывайте.
Вам нужно развернуть выпадающий список? my_combo_box.DroppedDown = true;
Вам необходимо уведомить подписчиков о наступлении события?
if (MyEvent != null)
MyEvent(this, new EventArgs());

Что из этого вы хотите?