仅为所有按钮的 MouseEnter 事件编写一个方法

本文关键字:方法 一个 事件 按钮 MouseEnter | 更新日期: 2023-09-27 18:36:50

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

仅为所有按钮的 MouseEnter 事件编写一个方法

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

例如:

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

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

您可以使用 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是否为空。