C#: 如何在不实际点击按钮的情况下调用按钮事件处理方法

23

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

btnTest_Click(object sender, EventArgs e)
我怎样才能在我的代码中调用这个函数(即不需要实际点击按钮)?
13个回答

31
btnTest_Click(null, null);

假设该方法没有使用这两个参数(通常情况下确实不会使用它们),

但说实话,这样做很棘手。如果您有需要被调用的代码,则应遵循以下约定:

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

protected void SomeOtherFunctionThatNeedsToCallTheCode()
{
   SomeSub();
}

protected void SomeSub()
{
   // ...
}

14
不,不要写太多代码。你不应该同时将一个方法用于调用和事件。这会造成误导和混淆。 - Spencer Ruport
2
不,它并没有自我记录。这就是关键所在。如果在btnTest未被点击的情况下触发了btnTest_Click,那么这是具有误导性的。没得商量。 - Spencer Ruport
4
没有讨论的余地。在btnTest未被点击时执行btnTest_Click会产生误导。需要进行修改。 - Spencer Ruport
5
站在Spencer这边,SomeSub是一种关注点分离。Spencer并不提倡将其称为"SomeSub",而更倾向于使用"HandleUserLogin"。对于维护开发人员来说,“HandleUserLogin();”比“btnLogin_Click(null, null)”更明显,特别是如果“btnLogin_Click”除处理用户登录外还执行其他操作时! - Bryan Boettcher
2
我的观点是人们写的代码太多了。更少的代码并不总是更好。在这种情况下,我必须同意@SpencerRuport的看法。 - Rob Angelier
显示剩余9条评论

19
抱歉,我只能用英语回答。
btnTest_Click( this, new EventArgs() );

3
EventArgs.Empty 是一个静态的 new EventArgs()。因此,使用 EventArgs.Empty 更为恰当,但创建新实例也几乎同样好。 - AMissico

6

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

btnTest.PerfromClick();

6
您可以使用反射来调用OnClick方法,从而触发单击事件处理程序。虽然我感到有些不舒服,但这确实有效...
MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);

clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });

4

如果这个方法没有使用到sendere,那么你可以调用:

btnTest_Click(null, null);

你可能应该考虑将该方法内的代码提取到自己的方法中,这样你就可以从按钮点击事件处理程序中调用它,并在需要该功能的代码中的任何其他位置调用它。

2

只需调用:

btnTest_Click(null, null);

只需确保您没有尝试在函数中使用这两个参数。


2

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


1

在第一个按钮事件中调用第二个按钮(图像按钮)事件:

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

如果您保存了某些内容,您可以使用按钮状态,例如imagebutton的commandArgument。


0
btnSubmit_Click(btnSubmit,EventArgs.Empty);

1
虽然这可能回答了作者的问题,但它缺少一些解释性的词语和/或文档链接。裸代码片段没有周围的一些短语是不太有帮助的。您也可以在如何撰写好的答案中找到很多有用的信息。请编辑您的答案 - 来自审核 - Nick

0

您可以像调用其他函数一样调用btnTest_Click函数。

最基本的形式如下:

btnTest_Click(this, null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接