我想在程序运行时显示一个小表单。这是代码:
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0;
InitForm init = new InitForm();
init.Show();
init.BringToFront();
comm = init.Start();
this.Opacity = 100;
}
Start()
方法会在InitForm
的列表框中绘制一些行。
我有两个问题:
InitForm
位于主表单后面。我该如何把它带到前面?答案 0 :(得分:1)
无法在该代码中看到ListBox。但是,在Load事件处理程序完成后,UI线程再次空闲时才会进行绘制。这也意味着Opacity任务没有完成任何任务。
Z顺序问题(部分)由此引起,主要形式不可见,因此BringToFront()不起作用。使用Show(this)以便InitForm是一个拥有的窗口,它始终显示在主窗体的前面(推荐)或使用Shown事件。
答案 1 :(得分:0)
When the program starts, the list box is not populated, I just get the
waiting cursor, then the main form is displayed and the box is populated
at the same time;
您期望会发生什么?您的UI线程忙于执行下面的代码
this.Opacity = 0;
InitForm init = new InitForm();
init.Show();
init.BringToFront();
comm = init.Start();
this.Opacity = 100;
一旦它被释放,它就会显示填充的表格和列表框。它在我看来表现正确
this.Opacity = 0;
上面的行没有任何效果,因为UI线程将首先执行所有行,然后它将显示UI,这意味着当UI显示已经执行了this.Opacity = 100;
时
I want to display a small form when the program is ran. The InitForm
is behind the main form. How do I bring it to front?
为什么不将Small Form
设置为启动表单并在小表单的加载方法中加载MainForm
?
答案 2 :(得分:0)
您应该在并行线程上加载辅助表单。 因此,在Form 1的加载事件处理程序中,您将触发第二个线程,显示Form2。
答案 3 :(得分:0)
您可以通过设置此属性
将Init表单置于最前面init.TopMost=true
它对我有用,退房,