【问题标题】:Usercontrol with transparent backcolor when animating, it is not visible动画时具有透明背景色的用户控件,不可见
【发布时间】:2014-01-13 07:44:14
【问题描述】:

我创建了一个具有透明背景的用户控件。我在 Windows 窗体上使用此用户控件,并在单击按钮时对控件执行一些动画操作。 myctrl 是在 windows 窗体中创建的用户控件。下面是代码:

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

问题:一旦循环开始,用户控件不可见,而当循环结束时,控件可见。 另外,我将控件放在位于 winforms 上的图片框上。

【问题讨论】:

  • 将 UI 线程挂起 10 秒永远不会奏效,Windows 对此非常反感。请改用计时器。
  • @Hans--它工作了..使用计时器..thanx..

标签: c# .net winforms


【解决方案1】:

也许你必须使用Refresh 而不是Update。

或者,一旦您阅读了有关 AnimateWindow 的信息,您可能会完全改变您的操作方式。

编辑

我一定是瞎了眼,没有注意到你的动画有一个明确的问题。关键是,你马上就做(用天真的Thread.Sleep)。当你这样做时,重绘被阻止(即使你打电话给Refresh你也看不到结果)。所以是的,在动画的持续时间内不会有任何可见的东西。

您需要做的是将动画(更可能使用Timer)分割成帧并一次只显示一帧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多