Как программно вызвать событие? - PullRequest
4 голосов
/ 30 января 2009

Я создаю приложение на C # для Windows Mobile, которое мне нужно для программного вызова события нажатия кнопки.

Я посмотрел на класс Button и не вижу способа сделать это.

Ответы [ 6 ]

9 голосов
/ 30 января 2009

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

3 голосов
/ 30 января 2009

Вы можете сделать что-то вроде этого:

    private void button1_Click(object sender, EventArgs e)
    {
        OnButtonClick();
    }

    private void OnButtonClick()
    {

    }

Тогда вы можете позвонить своему OnButtonClick() куда вам нужно.

2 голосов
/ 10 марта 2012

Класс Control, от которого наследуется Button, имеет метод OnClick, который вызывает событие Click. Используя рефлексию, вы можете вызвать этот метод, даже если он объявлен защищенным. Например, я создал следующий метод расширения:

public static void PerformClick(this Control value)
    {
        if (value == null)
            throw new ArgumentNullException();

        var methodInfo = value.GetType().GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
        methodInfo.Invoke(value, new object[] { EventArgs.Empty });
    }

Хотя это можно считать грязным хаком ...

1 голос
/ 30 января 2009

Не совсем тот ответ, который вы, вероятно, искали :::

Вы можете просто вызвать код, который хотите запустить, переместить основную часть кода вне метода обработки OnClick. Метод OnClick может запустить этот метод так же, как ваш код.

0 голосов
/ 08 февраля 2018

Вы можете вызвать добавленную функцию обработчика событий как:

someControl_EventOccured(someControl, new EventArgs()); 

Это работает, когда аргумент события элемента управления e не используется внутри функции обработчика, и в основном он не используется.

0 голосов
/ 30 января 2009

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

...