Как вызвать событие вручную или как имитировать нажатие на кнопку

95
12 января 2021, 03:00

Есть форма, на ней userControl который прилетает по dll, после выбора продукта с userControl, открываеться другая форма с дополнительными параметрами( у меня нет доступа к этой форме), на ней нажимаем кнопку принять, форма закрывается, мы выходим из функции. Теперь мне нужно запустить другую функцию в этом же классе, можно запустить ее через нажатие на кнопку в первой форме, но мне нужно что бы эта функция запускалась автоматически. Тоесть нужно вызвать событие вручную .Как это сделать?

public partial class CatalogPaletteControl : UserControl
{
     public CatalogPaletteControl()
     {
        InitializeComponent(); 
     }
     private void CatalogPaletteControl_Load(object sender, EventArgs e)
     {
     }
     private void button1_Click(object sender, EventArgs e)
     {
         //do something
     }
}

После загрузки CatalogPaletteControl_Load поток заканчиваеться, тоесть ничего больше не происходит. Где вызывать button1_Click(null,null)

Answer 1

Обработчик события - это обычный метод. И вызвать его можно самым обычным способом.

Допустим, имеется такой метод-обработчик нажатия на кнопку

private void SomeButton_Click(object sender, EventArgs e)
{
    // some code
}

Вызываем его:

SomeButton_Click(null, null);

Здесь в качестве параметров передаются null.

Если в обработчике нужно знать, какая именно кнопка вызвала его, плюс нужно определённое значение аргументов события, то вызываем метод с параметрами:

SomeButton_Click(someButton, EventArgs.Empty);

Второй параметр можно явно создать: new EventArgs().

У класса Button есть метод PerformClick, можно использовать его:

someButton.PerformClick();

Ещё один вариант, вынести в отдельный метод код, содержащийся в обработчике события:

private void SomeButton_Click(object sender, EventArgs e)
{
    DoWork();
}
private void DoWork()
{
    // some code
}

И вызывать этот метод там, где нужно:

DoWork();

Естественно, добавляем параметры, если они нужны.

Этот способ более правильный с точки зрения архитектуры: отделяем код бизнес-логики от GUI.

READ ALSO
WPF Реализация условий, соблюдая паттерн MVVM

WPF Реализация условий, соблюдая паттерн MVVM

Подскажите как реализовать в WPF приложении условияНапример, я хочу, чтобы в зависимости от текста одного TextBlock'a изменялся цвет текста другого...

118
Получение информации о мониторах без WinForms

Получение информации о мониторах без WinForms

Необходимо получать данные о количестве мониторов, а так-же о рабочей области каждого из них, иметь возможность получить вычислить монитор,...

111
Ошибка при компиляции CS1061

Ошибка при компиляции CS1061

Компилятор пишет сообщение:

134