代码之家  ›  专栏  ›  技术社区  ›  Ayush

如何确定哪个按钮调用了事件处理程序?

  •  2
  • Ayush  · 技术社区  · 15 年前

    我有一个有两个按钮的表单: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。

    3 回复  |  直到 15 年前
        1
  •  9
  •   Alex McBride    15 年前

    引发事件的对象作为发送方参数传递给事件处理程序,因此可以将其转换为正确的类型来访问它。

    protected void OldFileBrowse_Click(object sender, EventArgs args)
    {
        Button btn = (Button)sender;
    }
    

    if (btn == btn_oldFile) // etc..
    
        2
  •  2
  •   baflgraf    15 年前

    您需要检查发件人是btn_oldFile还是btn_newFile。

    if (sender == btn_oldFile)
    { // print to tbx_oldFile }
    else
    { // blah }

        3
  •  0
  •   JaredPar    15 年前

    正如Fara所指出的,当点击发生时 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 
    }