你分别在这三个事件里用Console.WriteLine输出信息不行吗?
e.GetType()你想得到什么?

解决方案 »

  1.   

    我解释的不清楚
    我是想把三个事件处理函数的名称写成一个,取名为MouseHandlers
    生成private void MouseHandlers(object sender, EventArgs e)
            {
            }
    然后判断e的的具体值来确定进行哪个输出?
    问是否能这样处理?如果能,应该怎样操作?
      

  2.   

    我把鼠标的MouseEnter,MouseLeave,MouseHover 3个事件的事件处理函数名都起成MouseHandlers
    this.textBox1.MouseLeave += new System.EventHandler(this.MouseHandlers);
                this.textBox1.MouseEnter += new System.EventHandler(this.MouseHandlers);
                this.textBox1.MouseHover += new System.EventHandler(this.MouseHandlers);
    文本框添加这个相同的MouseHandlers难道只能是相同类型的多个控件才能添加同一个事件?
    不是可以用sender来确定是那个控件发生了这个事件吗?
    是不是只能是这种情况?
    sender.GetType() 不是可以这样做到吗?
    e同样有GetType()方法,不可以吗?
    没有做成功过的朋友请不要说行或不行之类的话,希望能给出具体实现,请做过的高手指点一下
    谢谢
      

  3.   

    namespace TestEvents
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            this.textBox1.MouseLeave += new System.EventHandler(this.MouseHandlers_Leave);
                this.textBox1.MouseEnter += new System.EventHandler(this.MouseHandlers_Enter);
                this.textBox1.MouseHover += new System.EventHandler(this.MouseHandlers_Hover);            this.button1.MouseLeave += new System.EventHandler(this.MouseHandlers_Leave);
                this.button1.MouseEnter += new System.EventHandler(this.MouseHandlers_Enter);
                this.button1.MouseHover += new System.EventHandler(this.MouseHandlers_Hover);
            }        private void MouseHandlers_Enter(object sender, EventArgs e)
            {
                
                Control obj = (Control)sender;
                if( obj.Name == "textBox1" )
                {
                    Console.WriteLine("Mouse Enter in textBox1");
                }
                else if (obj.Name == "button1")
                {
                    Console.WriteLine("Mouse Enter in button1");
                }
            }        private void MouseHandlers_Hover(object sender, EventArgs e)
            {            Control obj = (Control)sender;
                if (obj.Name == "textBox1")
                {
                    Console.WriteLine("Mouse Hover on textBox1");
                }
                else if (obj.Name == "button1")
                {
                    Console.WriteLine("Mouse Hover on button1");
                }
            }        private void MouseHandlers_Leave(object sender, EventArgs e)
            {            Control obj = (Control)sender;
                if (obj.Name == "textBox1")
                {
                    Console.WriteLine("Mouse leave from textBox1");
                }
                else if (obj.Name == "button1")
                {
                    Console.WriteLine("Mouse leave from button1");
                }
            }
        }
    }
    上面的代码应该能达到你现在的需求了
    这3个鼠标事件无法直接从 EventArgs 里面判断,如果非要判断那只能做得更复杂些,捕获每个需要控制的object的消息来判断
      

  4.   

    谢谢
    也就是说我想的是可以的,但不是很容易实现
    最后还想问一下就是,我的我照着Console.WriteLine("Mouse Enter in textBox1");
    Console.WriteLine("Mouse Enter in button1");
    但却没有反映,并控制台并没有出现上述语句,望高手们再次指点!
    先谢过了
      

  5.   

    没有直接复制
    我是找着在vs里一步步做的,包括Form上的两个控件
    我是指Console.WriteLine("Mouse Enter in textBox1");没有在控制台输出
    但我换成MessageBox.show("Mouse Enter in textBox1");却正常输出
    这回应该说清楚了
      

  6.   

    多个控件可以通过反射来得到
      
    EventArgs 此类不包含事件数据,在事件引发时不向事件处理程序传递状态信息的事件会使用此类。如果事件处理程序需要状态信息,则应用程序必须从此类派生一个类来保存数据.
    msdn 说的,应该能弄出来