设置表单的父级

问题描述 投票:0回答:3

我有一个 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();

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

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

提前致谢

c# windows forms winforms
3个回答
22
投票

我会做这样的事情:

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

SavingForm
中,我会在加载处理程序中启动一个计时器,该计时器运行 500 毫秒,然后在完成后关闭表单。这样更干净。
ShowDialog()
还会锁定您的 UI,仅显示
SavingForm
,不允许用户乱搞任何东西。


18
投票

使用这个:

saving.Show(this);

显示表单时设置所有者。

编辑:

ShowDialog()
方法还有一个重载,让您可以指定所有者(如果这是您决定走的路线):

saving.ShowDialog(this);

6
投票

如果您将父级 (

this
) 传递给所有者,就像

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

然后您可以在子窗体中访问 Owner 的属性和方法(在本例中为

SavingForm
),前提是将您需要的每个属性的 Owner 属性
Modifier
设置为
Internal
Public
访问(您可以直接在源代码中编辑修饰符,或通过表单的 designer 属性 - 每个控件都有一个
Modifier
属性)。

您可以在这里找到对 Owner、Parent 和 ParentForm 之间差异的详细解释。

注意:

saving.Show(this);
saving.ShowDialog(this);
那样传递它对我的情况没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.