это мой первый пост здесь. Прежде всего, немного истории, я новичок в C # и буквально на стадии прорезывания зубов. Я инженер-химик и в основном имею опыт работы с такими языками, как MATLAB и Mathematica, но мне всегда нравилось программирование, и я решил изучить C #, чтобы создать дружественные интерфейсы для некоторых программ, которые я использовал. Обратите внимание, что я использую формы Windows, а не WPF.
То, что я хотел бы сделать, это иметь экран главного меню со ссылками на различные формы. Теперь, чтобы это выглядело лучше, я хочу вот что; когда я нахожу курсор над картинкой (изображение кнопки) в главном окне, я бы хотел, чтобы кнопка немного «росла», а затем, когда я ее оставляю, должна «сжиматься» до ее первоначального размера. До сих пор мой метод состоял в том, чтобы попытаться загрузить gif этой анимации роста в событие mouseEnter, а затем загрузить анимацию сокращения в mouseLeave, но это просто зацикливает соответствующий gif снова и снова. Как я могу получить GIF, чтобы играть только один раз?
Я пытался загружать кадры последовательно с нитью сна между ними, но все, что я вижу, когда делаю это, это последнее изображение, которое я пытаюсь загрузить. Вот пример кода, используемого для этого метода, где я пытаюсь показать одно изображение, а затем показать другое через 0,1 секунды
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
((PictureBox)sender).Image =Image.FromFile("C:/Users/michael/Desktop/131.bmp");
Thread.Sleep(100);
((PictureBox)sender).Image = Image.FromFile("C:/Users/michael/Desktop/131a.bmp");
}
Также есть ли способ сделать это без GIF, например, с помощью цикла for для увеличения размера кнопки или Picturebox?
РЕДАКТИРОВАТЬ 1:
куда я помещаю остановку таймера, чтобы при запуске второй анимации остановилась первая?
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
Timer timeraf = new Timer();
timeraf.Interval = 10;
timeraf.Tick += new EventHandler(timerAfwd_Tick);
timeraf.Start();
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
Timer timerab = new Timer();
timerab.Interval = 10;
timerab.Tick += new EventHandler(timerAbwd_Tick);
timerab.Start();
}