如何更改mouseOver上的按钮背景图像?

问题描述:

我有IMG1和IMG2在我的资源。我很容易在btn属性中将btn.backgroundImage设置为img1。图像路径是:c:\ Project \ Resources ...如何更改mouseOver上的按钮背景图像?

现在我不知道如何设置btn.backgroundImage是img2,我想在事件“MouseEnter”上做到这一点。所以,我会apreciate完整的代码,因为我很绿色这个...

我apreciate任何给定的想法...

+0

对于Web UI还是一个双赢的形式UI? – Sunny 2010-03-31 15:30:32

+0

为双赢形式UI – Slavisa 2010-03-31 15:40:50

在的WinForms的情况下:

如果包括图像,以你的资源,你可以像这样做,非常简单和直接的:

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

我不建议硬编码图像路径。

正如你已经改变了你的问题......

中有没有的WinForms(上)鼠标悬停AFAIK,有MouseHover和mousemove事件,但如果你对这些改变的图像,它不会改变回来,所以MouseEnter + MouseLeave是你在寻找的我认为的。总之,改变图像上悬停或移动:

in the constructor: 
button1.MouseHover += new EventHandler(button1_MouseHover); 
button1.MouseMove += new MouseEventHandler(button1_MouseMove); 

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

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

将图片添加到您的资源:Projectproperties /资源/添加/现有文件

+0

@贾斯汀的答案应该因为'MouseMove'会触发使用,只要鼠标移动 - 包括当它仍徘徊在小部件,从而导致行为怪异 – ecoe 2014-11-10 16:29:04

我觉得是这样的:

btn.BackgroundImage = Properties.Resources.*Image_Identifier*; 

*Image_Identifier*是资源中图像的标识符。

我做在Visual Studio 2008的快速项目的.NET 3.5 C#窗体窗体应用程序,并能够创建下面的代码。我发现了进入和离开方法的事件。

在InitializeComponent()函数。我使用Visual Studio设计器添加了事件处理程序。

this.button1.MouseLeave += new System.EventHandler(this.button1_MouseLeave); 
this.button1.MouseEnter += new System.EventHandler(this.button1_MouseEnter); 

在按钮事件处理程序方法中设置背景图像。

/// <summary> 
/// Handles the MouseEnter event of the button1 control. 
/// </summary> 
/// <param name="sender">The source of the event.</param> 
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> 
private void button1_MouseEnter(object sender, EventArgs e) 
{ 
     this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img2)); 
} 

/// <summary> 
/// Handles the MouseLeave event of the button1 control. 
/// </summary> 
/// <param name="sender">The source of the event.</param> 
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> 
private void button1_MouseLeave(object sender, EventArgs e) 
{ 
     this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img1)); 
} 
+0

你将它设置为相同的图像在鼠标离开.. – 2010-03-31 18:04:01

+0

好的,应该是img1,代码已经更新了! – Justin 2010-04-07 16:37:22

您可以根据与MouseHover和的MouseDown特定图像这样的按钮,创建一个类:

公共类AdvancedImageButton:按钮 {

public Image HoverImage { get; set; } 
public Image PlainImage { get; set; } 
public Image PressedImage { get; set; } 

protected override void OnMouseEnter(System.EventArgs e) 
{ 
    base.OnMouseEnter(e); 
    if (HoverImage == null) return; 
    if (PlainImage == null) PlainImage = base.Image; 
    base.Image = HoverImage; 
} 

protected override void OnMouseLeave(System.EventArgs e) 
{ 
    base.OnMouseLeave(e); 
    if (HoverImage == null) return; 
    base.Image = PlainImage; 
} 

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    base.OnMouseDown(e); 
    if (PressedImage == null) return; 
    if (PlainImage == null) PlainImage = base.Image; 
    base.Image = PressedImage; 
} 

}

这解决方案有一个小缺点,我肯定可以修复:当您因某种原因需要更改Image属性时,您还必须更改PlainImage属性也是。