我有一个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();
并抛出异常“顶级控件无法添加到控件中。”
如何将此状态窗口置于调用窗口中?
提前致谢
答案 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
设置为Internal
或Public
(您可以直接在源代码中编辑修饰符,也可以通过表单设计器进行编辑属性-每个控件都有一个Modifier
属性)。
注意:对于我来说,像saving.Show(this);
或saving.ShowDialog(this);
这样的传递没有帮助。