我创建了一个具有透明背景的usercontrol。我在Windows窗体上使用此usercontrol,并在单击按钮时对控件执行一些动画操作。 myctrl是以windows窗体创建的usercontrol。以下是代码:
private void button1_Click(object sender, EventArgs e)
{
Point p1 = new Point(myctrl.Location.X, myctrl.Location.Y);
for (int i = 0; i < 100; i++)
{
myctrl.Location = new Point(p1.X + i, p1.Y + i);
myctrl.Update();
pictureBox1.Update();
i++;
Thread.Sleep(100);
}
}
问题:一旦循环开始,usercontrol就不可见,并且循环结束时控件是可见的。 另外,我将控件放在winforms上的图片框中。
答案 0 :(得分:1)
也许您必须使用Refresh
而不是Update
。
或者,一旦您阅读AnimateWindow
,就可以完全改变您的操作方式。
我必须盲目地注意你的动画没有明确的问题。关键是,你一次做到这一点(天真的Thread.Sleep
)。当你这样做时,重新绘制被阻止(即使你打电话给Refresh
你也看不到结果)。所以,是的,在动画期间,没有任何可见的东西。
您需要做的是将动画(更可能使用Timer
)分割成帧并一次只显示一帧。