Другие языки программирования и технологии
Как в C# вызвать событие из кода программы?
Нужно, чтоб при вводе текста в ComboBox и выполнении некоторых команд в обработчике TextChanged происходило событие DropDown. Как его вызвать из кода?
Ты не правильно понимаешь событийную модель. Когда раскрывается в комбобоксе список, происходит событие 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.
Самое разумное решение твоей проблемы следующее.
Написать ф-цию, которая делает то, что происходит при событии 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.
ниже ветка на правильном форуме :-)
Вам нужно выполнить один и тот же код в двух разных обработчиках? Вынесете его в отдельный метод и вызывайте.
Вам нужно развернуть выпадающий список? my_combo_box.DroppedDown = true;
Вам необходимо уведомить подписчиков о наступлении события?
if (MyEvent != null)
MyEvent(this, new EventArgs());
Что из этого вы хотите?
Вам нужно развернуть выпадающий список? my_combo_box.DroppedDown = true;
Вам необходимо уведомить подписчиков о наступлении события?
if (MyEvent != null)
MyEvent(this, new EventArgs());
Что из этого вы хотите?
Похожие вопросы
- C++ не хочет компилировать код. Не удаётся запустить программу.
- C++ Видимо недоделка в коде?
- помогите пожалуйста кто смыслит в C# или в C++, очень нужна ваша помощь, нужен код программы, точнее двух
- Помогите пожалуйста исправить код программы на visual c++!!
- Необходим код программы, C++
- Нужен код программы, C++
- Помогите пожалуйста перевести код программы с C++ на Си.
- Помогите исправить ошибку в коде программы на паскале.
- c# где ошибка в коде
- Я зная C++ (уровень - днище) написал полноценную программу на C# за 7 дней. А программисты C# могут так же на C++?