设置表单的父级

时间:2010-02-07 18:17:33

标签: c# winforms

我有一个Windows表单,我想打开一个状态表单,上面写着“正在保存......” 然后在保存完成时消失。我想将这个小状态表单放在调用表单的中间。我已经尝试将“StartPosition”设置为“CenterParent”,但它确实有效。我从另一种形式创建状态表单,如下所示:

SavingForm saving = new SavingForm();
savingForm.Show();
Thread.Sleep(500); //Someone said this is bad practice ... why?
savingForm.Close();

调用表格不是“父母”吗? 当我设置一个保存手表时,表示它没有父母。

我试过了:

SavingForm saving = new SavingForm();
saving.Parent = this;
savingForm.Show();
Thread.Sleep(500);
savingForm.Close();

并抛出异常“顶级控件无法添加到控件中。”

如何将此状态窗口置于调用窗口中?

提前致谢

3 个答案:

答案 0 :(得分:18)

我会做这样的事情:

SavingForm saving = new SavingForm();
savingForm.ShowDialog(this);

在SavingForm中,我会在加载处理程序中启动一个运行500毫秒的计时器,然后在完成后关闭表单。这样清洁。 ShowDialog还会将您的UI锁定为仅显示保存表单,并且不允许用户使用任何内容。

答案 1 :(得分:14)

使用此:

saving.Show(this);

在显示表单时设置所有者。

修改ShowDialog()方法也有一个重载,让您指定所有者,如果这是您决定去的路线:

saving.ShowDialog(this);

答案 2 :(得分:1)

如果您将父(this)传递给所有者,例如

SavingForm saving = new SavingForm() { Owner = this };

然后,您可以访问所有者的属性和方法,只要它们的Modifier设置为InternalPublic(您可以直接在源代码中编辑修饰符,也可以通过表单设计器进行编辑属性-每个控件都有一个Modifier属性)。

注意:对于我来说,像saving.Show(this);saving.ShowDialog(this);这样的传递没有帮助。