4

我正在尝试以相同的方法处理多个控件的 mouseover 和 mouseleave 事件。我的表单有 10 个不同的按钮,我需要处理它们的鼠标事件。现在通常我会做这样的事情:

  public Form1()
  {
       InitializeComponent();
       button1.MouseEnter += new EventHandler(button1_MouseEnter);
       button1.MouseLeave += new EventHandler(button1_MouseLeave);
  }

  void button1_MouseLeave(object sender, EventArgs e)
  {
       this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img1));
  }


  void button1_MouseEnter(object sender, EventArgs e)
  {
       this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img2));
  }

但是因为我有 10 个控件,它们的处理方式基本相同,所以我发现为每个控件执行单独的方法是不切实际的,在我的例子中,它的 20 个方法几乎可以执行相同的操作,但针对不同的控件。

那么有没有办法将这些事件集成到一个中,并确定应该处理哪个控件。

编辑:

你能不能确定哪个确切的控件引发了事件,假设我有一个图片框,它根据悬停的按钮更改图像。

4

3 回答 3

4

是的,当您分配处理程序时,只需对所有控件使用相同的事件处理程序。在处理程序内部,使用if()来确定哪个控件引发了事件。

void SomeEvent_Handler ( object sender, EventArgs e )
{
    if ( sender == btn1 ) // event is from btn1
    {
        btn1....;
    }
    else if ( sender == checkbox1 ) // event is from checkbox1
    {
        checkbox1.....;
    }
}
于 2012-10-11T16:50:35.633 回答
3

您应该能够对所有控件使用相同的处理程序,特别是因为BackgroundImage是 的共享属性Control,而不是Button

      public Form1()
      {
           InitializeComponent();
           button1.MouseEnter += control_MouseEnter;
           button1.MouseLeave += control_MouseLeave;
           button2.MouseEnter += control_MouseEnter;
           button2.MouseLeave += control_MouseLeave;
      }

      void control_MouseEnter(object sender, EventArgs e)
      {
           Control control = sender as Control;
           if (control != null)
               control.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img1));
      }


      void control_MouseEnter(object sender, EventArgs e)
      {
           Control control = sender as Control;
           if (control != null)
               control.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img2));
      }
于 2012-10-11T16:51:33.813 回答
2

当然,只需为您的所有事件订阅相同的方法,发送者就会给您按钮,这会导致事件。

于 2012-10-11T16:52:10.867 回答