以编程方式触发控件的事件

假设我有一个WinFoms项目。 只有一个按钮(例如button1 )。

问题是:是否可以通过代码触发ButtonClicked事件而无需单击它?

按钮控件具有可以调用的PerformClick()方法。

 button1.PerformClick(); 

.NET框架使用一种模式,其中对于每个事件X都有一个方法protected void OnX(EventArgs e) {} ,它引发了事件X 看到这篇Msdn文章 。 要从声明类外部引发事件,您必须派生类并添加公共包装器方法。 在Button的情况下,它看起来像这样:

 class MyButton : System.Windows.Forms.Button { public void ProgrammaticClick(EventArgs e) { base.OnClick(e); } } 

您可以直接调用事件处理函数,并为发件人指定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(); 

后一种方法的优点是可以将业务和UI逻辑分开。 你真的不应该在控件事件处理程序中有任何业务逻辑。

是的,只需按照您呼叫任何其他方式的方式调用该方法。 例如:

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

但是如果你必须做这样的事情,或许最好将新事件下的事件代码移动到新方法中?

为什么不直接将事件代码放入Method中。 然后让Event执行该方法。 这样,如果你需要执行事件上升的相同代码,你可以,但只需调用“方法”。

 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”事件相同的代码。

不要触发事件,调用事件调用的方法。 ;)

使用for循环来调用button_click事件

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

我们假设您至少需要一次点击按钮