0

我想在按钮控件的 MouseEnter 事件上显示图像(我有 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));
        } 
4

2 回答 2

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"));       

    }

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

于 2013-10-24T06:56:27.907 回答
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为空。

于 2013-10-24T06:55:02.367 回答