Подтвердить что ты не робот

Программное управление триггером

Предположим, что у меня есть проект WinFoms. Существует только одна кнопка (например, button1).

Вопрос: возможно ли инициировать событие ButtonClicked через код, не нажав на него?

4b9b3361

Ответ 1

Элементы управления Button имеют метод PerformClick(), который вы можете вызвать.

button1.PerformClick();

Ответ 2

В .NET Framework используется шаблон, где для каждого события X существует метод protected void OnX(EventArgs e) {}, который вызывает событие X. См. Статью Msdn. Чтобы поднять событие за пределами объявляющего класса, вам нужно будет получить класс и добавить общедоступный метод обертки. В случае Button это будет выглядеть так:

class MyButton : System.Windows.Forms.Button
{

    public void ProgrammaticClick(EventArgs e)
    {
        base.OnClick(e);
    }

}

Ответ 3

Вы можете просто вызвать функцию обработчика событий напрямую и указать null для отправителя и EventArgs.Empty для аргументов.

void ButtonClicked(object sender, EventArgs e)
{
    // do stuff
}

// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);

// call the event handler directly:
ButtonClicked(button1, EventArgs.Empty);

Или, скорее, вы переместите логику из события ButtonClicked в свою собственную функцию, а затем ваш обработчик событий и другой код, который у вас есть, в свою очередь вызовет новую функцию.

void StuffThatHappensOnButtonClick()
{
    // do stuff
}

void ButtonClicked(object sender, EventArgs e)
{
    StuffThatHappensOnButtonClick();
}

// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);

// Simulate the button click:
StuffThatHappensOnButtonClick();

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

Ответ 4

Да, просто вызовите метод так, как вы могли бы назвать любое другое. Например:

    private void btnSayHello_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Hello World!");
    }

    private void btnTriggerHello_Click(object sender, EventArgs e)
    {
        btnSayHello_Click(null, null);
    }

Ответ 5

button1.PerformClick();

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

Ответ 6

используйте цикл for для вызова события button_click

private void btnadd_Click(object sender, RoutedEventArgs e)
{ 
    for (int i = 0; i <= 2; i++)
        StuffThatHappensOnButtonClick(); 
}


void StuffThatHappensOnButtonClick()
{
    ........do stuff
}

мы предполагаем, что по крайней мере один раз вам нужно нажать кнопку

Ответ 7

Почему бы вам просто не ввести код события в метод. Затем выполните Событие с помощью метода. Таким образом, если вам нужно выполнить тот же код, что и событие, вы можете, а просто просто вызвать "Метод".

void Event_Method()
{
    //Put Event code here.
    MessageBox.Show("Hello!");
}

void _btnSend_Click(object sender, EventArgs e)
{
    Event_Method();
}

void AnotherMethod()
{
    Event_Method();
}

Имеют смысл? Теперь событие "Click" И в любом месте кода вы можете запустить тот же код, что и событие "Click".

Не запускайте событие, вызывайте метод, который вызывает событие.;)