C#:调用按钮事件处理程序方法而不实际单击按钮

我的aspx文件中有一个名为btnTest的按钮。 .cs文件有一个函数,单击该按钮时会调用该函数。

btnTest_Click(object sender, EventArgs e) 

如何从我的代码中调用此函数(即没有实际单击按钮)?

 btnTest_Click(null, null); 

前提是该方法不使用这些参数中的任何一个(这是非常常见的。)

说实话虽然这很蠢。 如果您需要调用代码,则应遵循以下约定:

 protected void btnTest_Click(object sender, EventArgs e) { SomeSub(); } protected void SomeOtherFunctionThatNeedsToCallTheCode() { SomeSub(); } protected void SomeSub() { // ... } 

使用

 btnTest_Click( this, new EventArgs() ); 

以上所有方法都不好,因为您可能会更改事件函数名称。 最简单的是:

 btnTest.PerfromClick(); 

您可以使用reflection来调用OnClick方法,该方法将触发click事件处理程序。

我觉得发布这个很脏但是有效……

 MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance); clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty }); 

如果该方法未使用sendere可以致电:

 btnTest_Click(null, null); 

您可能应该考虑的是将该方法中的代码提取到自己的方法中,您可以从按钮单击事件处理程序以及代码中需要该function的任何其他位置调用该方法。

它只是表单上的一种方法,您可以像任何其他方法一样调用它。 您只需要创建一个EventArgs对象传递给它,(并将按钮的句柄作为sender传递给它)

只需致电:

 btnTest_Click(null, null); 

只要确保你没有尝试在函数中使用这些参数中的任何一个。

在第一个按钮事件内部调用第二个按钮(imagebutton)事件:

 imagebutton_Click((ImageButton)this.divXXX.FindControl("imagbutton"), EventArgs.Empty); 

你可以使用按钮状态,如imagebutton的commandArgument,如果你保存一些东西。

btnTest_Click(new object(),EventArgs.Empty)

你可以像任何其他函数一样调用btnTest_Click。

最基本的forms是这样的:

 btnTest_Click(this, null); 
 btnSubmit_Click(btnSubmit,EventArgs.Empty); 
 btnTest.Click +=new EventHandler(btnTest_Click)