切换图片框可见性C#

时间:2011-05-21 20:47:11

标签: c# picturebox

为什么图片框控件的可见性属性不起作用。我最初将它们设置为false,以便在屏幕加载时它们不可见。但后来我想切换这个。我做了以下但似乎没有工作。这是一个Windows窗体应用程序。

private void Action()
    {
        while (true)
        {

            Random r1 = new Random();
            int num = r1.Next(1,3);

            switch (num)
            {
                case 1:
                    pictureBoxLeft.Visible = true;
                    pictureBoxRight.Visible = true;
                    break;
                case 2:
                    pictureBoxLeft.Visible = true;
                    pictureBoxRight.Visible = false;
                    break;
                case 3:
                    pictureBoxLeft.Visible = false;
                    pictureBoxRight.Visible = true;
                    break;

            }

            Thread.Sleep(200);
            pictureBoxLeft.Visible = false;
            pictureBoxRight.Visible = false;
            Thread.Sleep(500);
        }
    }

另外,添加,这与文本框正常工作!任何想法???

非常感谢提前

4 个答案:

答案 0 :(得分:5)

Visible属性设置为true不会显示控件,它只会创建一条将显示它的消息。只要您使主线程忙于Sleep,它就不会处理任何消息,并且不会显示控件。

您应该显示图片框,然后设置一个计时器,其代码将在触发计时器的滴答事件时隐藏图片框。然后退出方法,以便主线程可以处理将显示图片框的消息。

答案 1 :(得分:1)

这是您的UI线程。 UI线程非常繁忙,没有时间刷新显示。 UI线程忙于无休止的循环,所以它如何更新UI?

答案 2 :(得分:0)

除了Thread.Sleep();调用Application.DoEvents()以触发事件处理/ ui更新。但是请确保您不会以某种方式再次呼叫Action()。一个简单的Thread.Sleep()将不允许UI更新,因为您仍然在处理程序中,并且框架将无法自行触发任何新事件,因为它不知道您是否已完成等待(由于线程仍在忙)。

总体而言,您的方法可能是一个坏主意(取决于其他代码等)。请考虑使用计时器或后台工作人员。

答案 3 :(得分:0)

每当您进行一些更改后,UI更改不会发生变化时,请始终执行Refres()。例如pictureBoxLeft.Refresh();。这将始终显示UI更改。如果它适合你,请告诉我。

相关问题