我的表单中有一个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)中发现了一个类似的问题,但实际上它的答案也无法帮助我。
答案 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;
}