当鼠标悬停时,如何更改Winform中按钮的背景图片属性?

4

我想在鼠标悬停时更改按钮的backgroundImage属性,如下所示:

    private void btnGetHardwareID_MouseEnter(object sender, EventArgs e)
    {
        btnGetHardwareID.BackgroundImage = (System.Drawing.Image)(Properties.Resources._11949847771696668271pill_button_green_benji__01_svg_med);
        btnGetHardwareID.Refresh();
    }

    private void btnGetHardwareID_MouseLeave(object sender, EventArgs e)
    {
        btnGetHardwareID.BackgroundImage = (System.Drawing.Image)(Properties.Resources._11949847771793996117pill_button_purple_benji_01_svg_med);
        btnGetHardwareID.Refresh();
    }

btnGetHardwareID的属性如下:

    // btnGetHardwareID
    // 
    this.btnGetHardwareID.BackColor = System.Drawing.Color.Transparent;
    this.btnGetHardwareID.BackgroundImage = global::Travian.Properties.Resources._11949847771793996117pill_button_purple_benji_01_svg_med;
    this.btnGetHardwareID.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
    this.btnGetHardwareID.FlatAppearance.BorderSize = 0;
    this.btnGetHardwareID.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
    this.btnGetHardwareID.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
    this.btnGetHardwareID.ForeColor = System.Drawing.Color.White;
    this.btnGetHardwareID.Location = new System.Drawing.Point(31, 53);
    this.btnGetHardwareID.Name = "btnGetHardwareID";
    this.btnGetHardwareID.Size = new System.Drawing.Size(160, 40);
    this.btnGetHardwareID.TabIndex = 25;
    this.btnGetHardwareID.Text = "Get My Hardware-ID";
    this.btnGetHardwareID.UseVisualStyleBackColor = false;
    this.btnGetHardwareID.Click += new System.EventHandler(this.btnGetHardwareID_Click);
    this.btnGetHardwareID.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnGetHardwareID_MouseDown);
    this.btnGetHardwareID.MouseEnter += new System.EventHandler(this.btnGetHardwareID_MouseEnter);
    this.btnGetHardwareID.MouseLeave += new System.EventHandler(this.btnGetHardwareID_MouseLeave);
    this.btnGetHardwareID.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btnGetHardwareID_MouseUp);

现在的问题是,在MouseEnter时的backgroundImage如下所示:
Mouse Enter 而在MouseLeave时则是这样的: Mouse Leave 那个绿色按钮周围的灰色背景是什么,我该如何去掉它?
编辑: 原始图像如下: red button - original - png format green button - original - png format 还有MainForm的背景: main form - background-image 提前致谢。

你可能忘记在那些角落里将图像设为透明。 - Hans Passant
我用一张PNG图片测试了你的代码,它运行正常,请尝试另一张PNG图片。 - KF2
很难通过截图进行调试,我们也无法了解容器控件的任何信息。请在文件共享服务上发布最小复现项目。 - Hans Passant
将btnGetHardwareID.Refresh();更改为btnGetHardwareID.Invalidate(); 如果这样不起作用,那么您可能需要为图像创建一个掩码。 - Sorceri
@MoonLight 看看我的帖子,比创建掩码要简单得多。 - Sorceri
显示剩余3条评论
1个回答

4
您要查找的解决方案如下。将FlatAppearance.MouseOverBackColor设置为透明。
this.btnGetHardwareID.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接