在启动时从主窗体显示表单

时间:2011-12-30 14:09:48

标签: c# .net winforms

我想在程序运行时显示一个小表单。这是代码:

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的列表框中绘制一些行。

我有两个问题:

  1. 当程序启动时,列表框没有填充,我得到了 等待光标,然后显示主窗体,框就是 同时填充;
  2. InitForm位于主表单后面。我该如何把它带到前面?

4 个答案:

答案 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 

它对我有用,退房,