C#事件如何根据object sender、EventArgs e 得到事件本身名称?(sender as xxxxx)这个控件哪个事件执行这个方法呢?例如我有一个控件textBox1, 定义了它的Click、Enter、Leave……等多个事件都为相同的一个方法
private void 方法(object sender、EventArgs e),那我方法在这个方法里知道是click还是Enter还是Leave来调用它,然后根据这个来作不同的操作,因为有10个事件都是很简单的一个操作,不想分别写10个方法,想写到一个方法里判断,请大家指教下小弟,谢谢大家。

解决方案 »

  1.   

    ?(sender as xxxxx)这个就是个类型转化,那个事件下面都可以啊,sender存放的就是激发这个事件的控件信息不会吧,这么多的事件,而且都是一个控件的,为什么还要这么多呢,一个弄就好了,没有必要吧一般都是把几个相同控件的相同事件用一个方法,然后在方法中通过(sender as button).TEXT之类的属性来区分是那个button控件点击的,没有你这么做的吧,
      

  2.   

    我认为这是不可能的!虽然结果令你不满意,但你还是可以结贴了理由如下:
    1.你是把同一个控件的不同事件绑定到同一个方法,所以sender始终是这个控件,这个参数无法区别不同的事件2.剩下e这个函数,不同的事件,参数e可能不同,例如你用回车敲button,和用鼠标单击button,这个参数不同,可以区分。但还有大量的情况是不能区分的,比如Enter和Leave
    能不能区分,有个很简单和通用的方法:对e调用GetHashCode你会发现Enter和Leave事件,e的哈希代码是一样的,所以无法区分
      

  3.   

    object sender、EventArgs e),
    sender is source to data
     e is instances to class 
      

  4.   

    谢谢楼上几位的解答,我就是找不到有什么方法,所以来问下大家,2楼说的GetHashCode估计也算一种方法了。例如在脚本JS里,<div onclick="alert(event.type+'\r\n\r\n'+arguments.callee)">点击我查看</div>
    event.type就可以显示事件名(click),那除了GetHashCode,还有没有方法可以像JS的event.type那样,获得调用这个方法的事件名称,希望有方法,可以在以下的text1_fun方法中,判断到底是Scroll、Click、Enter、Leave哪个事件调用了当前的text1_fun方法以便进行不同的操作。text1.Scroll += new System.EventHandler(text1_fun);
    text1.Click += new System.EventHandler(text1_fun);
    text1.Enter += new System.EventHandler(text1_fun);
    text1.Leave += new System.EventHandler(text1_fun);
      

  5.   

    C#语言和Javascript是不同的,event.type就可以显示事件名(click),这个在 JS下是可以的,但是在 C#下想通过 你说的两个参数知道方法名是不可以的。
    如果你想实现你说的效果,你可以写个通用方法,比如:
    private void abc()
    {
    ...//在这里输入你的代码
    }
    然后你在其他10个方法中,调用此方法即可。