为什么图片框控件的可见性属性不起作用。我最初将它们设置为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);
}
}
另外,添加,这与文本框正常工作!任何想法???
非常感谢提前
答案 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更改。如果它适合你,请告诉我。