Как постепенно да преоразмерявате картинна кутия?

От известно време се опитвам да кодирам това и след няколко седмици търсене в мрежата за отговор реших да попитам

Всичко, което искам да направя, е постепенно да преоразмерявам pictureBox1 до зададено ограничение от променлива начална стойност, когато мишката задържи върху него, най-далечното, което стигнах, беше използването на forloop, което го накара незабавно да промени размера. Бих искал също така да променя височината и ширината едновременно (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();
//    }
}

За първи път питам, така че съжалявам, ако не съм дал достатъчно информация ^.^


person ThomasIS123    schedule 07.01.2014    source източник


Отговори (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 милисекунди е доста плавно. Трябва да зададете първоначалната височина и ширина, за да можете да се върнете към този размер, след като мишката напусне полето за картина. Използвам оператора за нулево обединяване, така че не се налага да спирате таймера. Докато условието от лявата страна на ? е вярно, то ще се изчисли на стойността от лявата страна на :. Когато условието е невярно, то се оценява от дясната страна на :.

person Cameron Tinker    schedule 07.01.2014
comment
Благодаря много, забравих да добавя новите манипулатори на събития и таймера, но след това работи перфектно! - person ThomasIS123; 08.01.2014