winforms 设置窗体的父级

emeijp43  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(131)

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


并抛出异常“无法将顶级控件添加到控件中”。
如何将此状态窗口置于呼叫窗口的中心?
先谢了

wnavrhmk

wnavrhmk1#

我会这样做:

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

字符串
在SavingForm中,我会在加载处理程序中启动一个计时器,该计时器运行500毫秒,然后在完成时关闭窗体。那边干净点。ShowDialog也会锁定你的UI,只显示保存表单,不允许用户篡改任何东西。

xytpbqjk

xytpbqjk2#

使用这个:

saving.Show(this);

字符串
显示窗体时设置所有者。

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

saving.ShowDialog(this);

cdmah0mi

cdmah0mi3#

如果将父对象(this)传递给Owner,如

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

字符串
则可以在子窗体中访问Owner的属性和方法(在本例中为SavingForm),前提是需要访问的每个属性的Owner属性**Modifier设置为InternalPublic(您可以直接在源代码中编辑修饰符,也可以通过表单的设计器属性**-每个控件都有一个Modifier属性)。
您可以找到Owner、Parent和ParentForm here之间的差异的很好的解释。

**注意:**像saving.Show(this);saving.ShowDialog(this);一样传递它在我的情况下没有帮助。

相关问题