如何逐步平滑地更改PictureBox大小? (在winforms,c#,visual studio 2013)

时间:2014-07-28 00:07:21

标签: c# winforms picturebox

我的表单中有一个Button和一个宽度为290,高度为145的PictureBox,最初是隐藏的。我想在按钮的MouseEnter事件发生时一点一点地显示PictureBox。所以我尝试了这段代码:

private void button1_MouseEnter(object sender, EventArgs e)
{
    pictureBox1.Size = new Size(0, 145);
    pictureBox1.Show();
    for (int i = 0; i < 290; i++)
        pictureBox1.Size = new Size(i, 145);
}

但它会立即显示PictureBox的主要大小。

我在这个网站(PictureBox does not change its size)中发现了一个类似的问题,但实际上它的答案也无法帮助我。

3 个答案:

答案 0 :(得分:2)

您的代码会立即执行,所以您将看到的是一个突然的变化。

使用计时器并在计时器滴答时逐渐增加大小。

timer = new Timer(16); //~60 FPS
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

...

private void button1_MouseEnter(object sender, EventArgs e)
{
    pictureBox1.Size = new Size(0, 145);
    pictureBox1.Show();

    timer.Enabled = true; // Enable it
}

...

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    if (pictureBox1.Width < 290)
        pictureBox1.Width++; //Increment
    else
        timer.Enabled = false; //Disable
}

答案 1 :(得分:0)

您必须使用Update的{​​{1}}方法重新绘制它。此外,稍微延迟会在更快计算机上更顺畅地改变大小。

我改变了你的代码:

pictureBox

答案 2 :(得分:-1)

1)将新的int定义为public:

public partial class Form1 : Form
    {
        int counter = 0;
.
.
.

2)使用计时器:

 private void timer1_Tick(object sender, EventArgs e)
        {
            counter = counter + 10;
            timer1.Interval = 10;
            pictureBox1.Show();
            if (counter <= 290)
            { pictureBox1.Width += 1; }            
        }

3)在鼠标事件中启用计时器:

private void button1_MouseEnter(object sender, EventArgs e)
{
    counter = 0;
    pictureBox1.Width = 0;
    timer1.Enabled = true;
}