Как постепенно изменять размер изображения?

Я пытался закодировать это некоторое время, и через пару недель поиска в Интернете ответа я решил спросить

Все, что я хочу сделать, - это постепенное изменение размера pictureBox1 до заданного предела от значения переменной стартера, когда мышка нависает над ним, и чем дальше я получал, тем раньше использовал форлуп, который мгновенно менял размер. Я бы хотел, чтобы он одновременно менял высоту и ширину (pictureBox1 будет квадратом, и я просто хочу, чтобы он был большим квадратом с небольшим плавным движением)

Также мне нужно, чтобы он постепенно менялся до первоначального размера, как только мышь выйдет из pictureBox1.

Я обсуждал пару решений на веб-сайтах, но ни один из них не работает должным образом, также вам может потребоваться знать, что у меня есть две формы, связанные с этим кодом; Form1 и frmMenu, и из-за большого количества ошибок я прокомментировал нижние два метода.

Я не получаю никаких ошибок, но это просто не работает.

public partial class frmMenu : Form
{
 //private int size = 100;

 public Timer timer1;



 public frmMenu()
 {
 InitializeComponent();
 pictureBox1.MouseEnter += new EventHandler(pictureBox1_MouseEnter);
 //pictureBox1.MouseLeave += new EventHandler(pictureBox1_MouseLeave); 

 }

 private string frmMenu_Load
 {
 set
 {
 timer1.Interval = 1;
 }
 }

 private void pictureBox1_MouseEnter(object sender, EventArgs e)
 {

 //for (int i = 140; i > size; size++)
 //{
 //}
 {
 timer1.Interval = 1;
 }
 timer1.Enabled = true;

 if (pictureBox1.Height <= 140)
 {
 pictureBox1.Size = new Size(pictureBox1.Size.Width, pictureBox1.Size.Height + 1);
 }
 else
 {
 timer1.Enabled = false;
 }

 }




// private void pictureBox1_MouseLeave(object sender, EventArgs e)
// {
// if (size > 100)
// for (int i = size; i > 100; i--)
// {
// size = i;
// }
// pictureBox1.Height = pictureBox1.Width = size;
// }

// private void pictureBox1_Click(object sender, EventArgs e)

// {
// var Form1 = new Form1();
// Form1.Show();

// var Menu = new frmMenu();
// Menu.Close();
// }
}

Это мой первый раз, прошу прощения, если я не получил достаточной информации ^. ^

1 ответ

Попробуйте этот код:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Test
{
 public partial class Form1 : Form
 {
 bool mouseHover;
 int width;
 int height;

 public Form1()
 {
 InitializeComponent();
 }

 private void Form1_Load(object sender, EventArgs e)
 {
 timer1.Interval = 25;
 timer1.Tick += timer1_Tick;
 width = pictureBox1.Width;
 height = pictureBox1.Height;
 timer1.Start();
 }

 void timer1_Tick(object sender, EventArgs e)
 {
 if (mouseHover)
 {
 pictureBox1.Width += (pictureBox1.Width < 100) ? 5 : 0;
 pictureBox1.Height += (pictureBox1.Height < 100) ? 5 : 0;
 }
 else
 {
 pictureBox1.Width += (pictureBox1.Width > width) ? -5 : 0;
 pictureBox1.Height += (pictureBox1.Height > height) ? -5 : 0;
 }
 }

 private void pictureBox1_MouseEnter(object sender, EventArgs e)
 { 
 mouseHover = true;
 }

 private void pictureBox1_MouseLeave(object sender, EventArgs e)
 {
 mouseHover = false;
 }
 }
}

Вы можете настроить интервал так, как вам нравится, но увеличение в 5 пикселей по горизонтали/вертикали каждые 25 миллисекунд довольно плавное. Вам нужно установить начальную высоту и ширину, чтобы вы могли вернуться к этому размеру после того, как мышь покидает окно с картинкой. Я использую нулевой оператор коалесценции, поэтому вам не нужно останавливать таймер. Пока условие на левой стороне ? true, он будет оценивать значение в левой части : Когда условие ложно, оно оценивается в правой части :

licensed under cc by-sa 3.0 with attribution.