【发布时间】:2010-03-05 22:39:18
【问题描述】:
我的 aspx 文件中有一个名为 btnTest 的按钮。 .cs 文件有一个在单击按钮时调用的函数。
btnTest_Click(object sender, EventArgs e)
如何从我的代码中调用此函数(即不实际单击按钮)?
【问题讨论】:
标签: c# asp.net button event-handling
我的 aspx 文件中有一个名为 btnTest 的按钮。 .cs 文件有一个在单击按钮时调用的函数。
btnTest_Click(object sender, EventArgs e)
如何从我的代码中调用此函数(即不实际单击按钮)?
【问题讨论】:
标签: c# asp.net button event-handling
btnTest_Click(null, null);
前提是该方法没有使用这些参数中的任何一个(通常不使用。)
说实话,虽然这很恶心。如果您有需要调用的代码,则应遵循以下约定:
protected void btnTest_Click(object sender, EventArgs e)
{
SomeSub();
}
protected void SomeOtherFunctionThatNeedsToCallTheCode()
{
SomeSub();
}
protected void SomeSub()
{
// ...
}
【讨论】:
SomeSub,但可能更多的是HandleUserLogin。对于维护开发人员来说,HandleUserLogin (); 比 btnLogin_Click (null, null) 更明显,特别是如果 btnLogin_Click 不仅仅是处理用户登录!
使用
btnTest_Click( this, new EventArgs() );
【讨论】:
您可以使用反射来调用OnClick 方法,该方法将触发点击事件处理程序。
我觉得发布这个很脏,但它有效......
MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });
【讨论】:
以上所有方法都不好,因为您可能会更改事件函数名称。最简单的是:
btnTest.PerfromClick();
【讨论】:
如果该方法没有使用 sender 或 e 您可以调用:
btnTest_Click(null, null);
您可能应该考虑将代码从该方法中提取到它自己的方法中,您可以从按钮单击事件处理程序以及代码中需要该功能的任何其他位置调用该方法。
【讨论】:
它只是表单上的一个方法,您可以像调用任何其他方法一样调用它。您只需要创建一个 EventArgs 对象来传递给它,(并将按钮的句柄作为sender 传递给它)
【讨论】:
只需调用:
btnTest_Click(null, null);
只要确保您没有尝试在函数中使用这些参数中的任何一个。
【讨论】:
在第一个按钮事件中调用第二个按钮(imagebutton)事件:
imagebutton_Click((ImageButton)this.divXXX.FindControl("imagbutton"), EventArgs.Empty);
如果你在其中保存一些东西,你可以使用按钮状态,例如 imagebutton 的 commandArgument。
【讨论】:
btnTest_Click(new object(), EventArgs.Empty)
【讨论】:
sender as Control会起作用。
(sender as Control) 如果您传入一个对象,将返回 null,因此该参数不起作用。我的反驳论点是,通过传入一个 null,您会破坏使用 (sender.GetType) 来检查类型的代码。
您可以像调用任何其他函数一样调用 btnTest_Click。
最基本的形式是这样的:
btnTest_Click(this, null);
【讨论】:
btnSubmit_Click(btnSubmit,EventArgs.Empty);
【讨论】:
您必须传递参数sender 和e 来调用.cs 文件中的按钮事件处理程序
btnTest_Click(sender,e);
【讨论】:
btnTest.Click +=new EventHandler(btnTest_Click)
【讨论】: