如何以编程方式调用事件?

时间:2009-01-30 15:07:02

标签: c# windows-mobile

我正在创建一个C#Windows Mobile应用程序,我需要以编程方式调用Button上的click事件。

我看过Button类,看不到这样做的方法。

6 个答案:

答案 0 :(得分:9)

您可以考虑更改您的设计:至少将逻辑从button1_Click处理程序移动到其他位置,以便您可以从任何地方调用它。

答案 1 :(得分:3)

您可以这样做:

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

    private void OnButtonClick()
    {

    }

然后,您可以随时随地拨打OnButtonClick()

答案 2 :(得分:2)

Button继承的Control类具有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 });
    }

虽然,这可能被认为是一个肮脏的黑客......

答案 3 :(得分:1)

不完全是您可能正在寻找的答案:::

您可以只调用要运行的代码,在OnClick处理方法之外移动代码。 OnClick方法可以像您的代码一样触发该方法。

答案 4 :(得分:0)

什么阻止你只是调用处理onClick事件的方法?

答案 5 :(得分:0)

您可以将添加的事件处理函数调用为:

someControl_EventOccured(someControl, new EventArgs()); 

当控制器的事件参数e未在处理函数内部使用时,这种方法很有效,并且大部分都没有使用它。