Как изменить фоновое изображение кнопки на mouseOver? - PullRequest
3 голосов
/ 31 марта 2010

У меня есть img1 и img2 в моих ресурсах. Я легко установил btn.backgroundImage как img1 в свойствах btn. Пути к изображениям: c: \ Project \ Resources ...

Теперь я не знаю, как установить btn.backgroundImage в img2, я хочу сделать это при событии "MouseEnter". Так что я бы оценил полный код, потому что я довольно зеленый об этом ...

Я ценю любую идею ...

Ответы [ 4 ]

17 голосов
/ 31 марта 2010

В случае винформ:

Если вы включите изображения в свои ресурсы, вы можете сделать это следующим образом, очень просто и прямо:

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 нет (on) MouseOver, есть события 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 / resources / add / существующий файл

3 голосов
/ 31 марта 2010

Я думаю что-то вроде этого:

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

Где *Image_Identifier* - идентификатор изображения в ваших ресурсах.

2 голосов
/ 31 марта 2010

Я сделал быстрый проект в Visual Studio 2008 для приложения формы Windows .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 голосов
/ 18 февраля 2014

Вы можете создать класс на основе Button с определенными изображениями для MouseHover и MouseDown, например:

открытый класс AdvancedImageButton: Button {

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...