只为所有按钮的MouseEnter事件编写一种方法

时间:2013-10-24 06:50:23

标签: c# .net winforms events

我想在按钮控件的MouseEnter事件上显示Image(我有6个按钮),我可以在每个按钮的下面使用代码

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

但我不想为每个按钮输入事件编写它,因此尝试只在方法上进行,所以可以使用这样的每个按钮,但我如何通过这个为不同的按钮选择不同的图像方法比?

void button_MouseLeave(object sender, EventArgs e)
        {
            var btn = (Button)sender;
            this.btn.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.particular image for particular button));
        } 

2 个答案:

答案 0 :(得分:4)

您为所有按钮注册相同的事件。

例如:

 btn1.MouseEnter += genericButton_event;
 btn2.MouseEnter += genericButton_event;

您可以使用与button相同的名称将图像添加到资源,以便使用btn.Name属性。 (类似于:btn1.png和btn2.png),并使用带有字符串属性“name”的反射来分配资源:

private void genericButton_event(object sender, EventArgs e)
    {
        var btn = (Button)sender;
        btn.BackgroundImage =   new Bitmap(System.Reflection.Assembly.GetEntryAssembly(). 
            GetManifestResourceStream("MyProject.Resources" + btn.Name +".png"));       

    }
  

您可以使用字符串从资源中获取位图,因此您可以根据按钮名称获取所需的背景图像。

答案 1 :(得分:1)

您可以使用Tag属性。它需要一个object - 所以你可以把它放在任何你想要的地方。

或者您可以通过在按钮后面命名并搜索正确命名的图像来选择要显示的图像。

Button btn = new Button();
btn.Tag = <YourImage>; // Here you define which image to show
btn.MouseLeave += btn_MouseLeave;

void btn_MouseLeave(object sender, EventArgs e)
{
     Button b = (Button)sender;
     b.BackGroundImage = (System.Drawing.Image)b.Tag;
}

当然,您必须检查Tag是否为空。