如何逐步调整图片框的大小?

时间:2014-01-07 21:09:18

标签: c# resize size picturebox smooth

我一直试图对此进行编码一段时间,经过几周的网络搜索后,我决定提问

我想要做的就是当鼠标悬停在它上面时,逐渐将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();
//    }
}

如果我没有提供足够的信息,这是我第一次这么抱歉^。^

1 个答案:

答案 0 :(得分:0)

试试这段代码:

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

您可以根据自己喜欢的方式调整间隔,但每25毫秒水平/垂直增加5个像素非常流畅。您需要设置初始高度和宽度,以便在鼠标离开图片框后返回到该大小。我使用null合并运算符,因此您不必停止计时器。只要?左侧的条件为真,它就会评估:左侧的值。当条件为假时,它将评估到:的右侧。