我有一个带有两个按钮的表单:btn_oldFile和btn_newFile。点击两个按钮调用函数btnOnClick:
btn_oldFile.Click += btnOnClick;
btn_newFile.Click += btnOnClick;
protected void OldFileBrowse_Click(object sender, EventArgs args)
{
//if btn_oldFile called
// print to tbx_OldFile
//else
//print to tbx_NewFile
}
在大多数情况下,除了为变量赋值之外,btnOnClick都是做同样的事情,无论哪个按钮自己调用。如果btn_oldFile调用该方法,我将一些文本打印到文本框:tbx_OldFile,而如果btn_newFile调用它,则文本将打印到tbx_NewFile。
如何确定哪个按钮是调用该方法的按钮?
答案 0 :(得分:9)
引发事件的对象作为sender参数传递给事件处理程序,因此您可以将其强制转换为正确的类型以进行访问。
protected void OldFileBrowse_Click(object sender, EventArgs args)
{
Button btn = (Button)sender;
}
编辑:然后您可以使用基本的if语句来检查它是哪个按钮。
if (btn == btn_oldFile) // etc..
答案 1 :(得分:2)
您需要检查发件人是否为btn_oldFile或btn_newFile。
你可以这样做:
if (sender == btn_oldFile)
{ // print to tbx_oldFile }
else
{ // blah }
答案 2 :(得分:0)
正如Fara指出发生点击时,导致点击的Button
将成为第一个参数。但是,此解决方案需要强制转换,并且可以通过调用该方法的派生类型进行挫败,而不是在Button
插槽中传递sender
类型。
更加类型安全的方法是使用lambda表达式以类型安全的方式传递相关按钮。
btn_oldFile.Click += delegate { OldFileBrowse_Click(btn_oldFile); };
btn_newFile.Click += delegate { OldFileBrowse_Click(btn_newFile); };
protected void OldFileBrowse_Click(Button sender) {
//if btn_oldFile called
// print to tbx_OldFile
//else
//print to tbx_NewFile
}