我正在创建一个C#Windows Mobile应用程序,我需要以编程方式调用Button上的click事件。
我看过Button类,看不到这样做的方法。
答案 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
未在处理函数内部使用时,这种方法很有效,并且大部分都没有使用它。