我有一个 Windows 表单,我想从中打开一个状态表单,上面写着“正在保存...” 然后保存完成后消失。我想将这个小状态表单放在调用表单的中间。我尝试将“StartPosition”属性设置为“CenterParent”,但它不起作用。我从其他表单创建状态表单,如下所示:
SavingForm saving = new SavingForm();
savingForm.Show();
Thread.Sleep(500); //Someone said this is bad practice ... why?
savingForm.Close();
调用形式不是“Parent”吗? 当我设置手表进行保存时,它说它没有父项。
我尝试过:
SavingForm saving = new SavingForm();
saving.Parent = this;
savingForm.Show();
Thread.Sleep(500);
savingForm.Close();
并且它抛出异常“顶级控件无法添加到控件中。”
如何将此状态窗口置于调用窗口的中心?
提前致谢
我会做这样的事情:
SavingForm saving = new SavingForm();
savingForm.ShowDialog(this);
在
SavingForm
中,我会在加载处理程序中启动一个计时器,该计时器运行 500 毫秒,然后在完成后关闭表单。这样更干净。 ShowDialog()
还会锁定您的 UI,仅显示 SavingForm
,不允许用户乱搞任何东西。
使用这个:
saving.Show(this);
显示表单时设置所有者。
编辑:
ShowDialog()
方法还有一个重载,让您可以指定所有者(如果这是您决定走的路线):
saving.ShowDialog(this);
如果您将父级 (
this
) 传递给所有者,就像
SavingForm saving = new SavingForm() { Owner = this };
然后您可以在子窗体中访问 Owner 的属性和方法(在本例中为
SavingForm
),前提是将您需要的每个属性的 Owner 属性 Modifier
设置为 Internal
或 Public
访问(您可以直接在源代码中编辑修饰符,或通过表单的 designer 属性 - 每个控件都有一个 Modifier
属性)。
您可以在这里找到对 Owner、Parent 和 ParentForm 之间差异的详细解释。
注意:像
saving.Show(this);
或saving.ShowDialog(this);
那样传递它对我的情况没有帮助。