我有一个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条答案
按热度按时间wnavrhmk1#
我会这样做:
字符串
在SavingForm中,我会在加载处理程序中启动一个计时器,该计时器运行500毫秒,然后在完成时关闭窗体。那边干净点。ShowDialog也会锁定你的UI,只显示保存表单,不允许用户篡改任何东西。
xytpbqjk2#
使用这个:
字符串
显示窗体时设置所有者。
编辑:
ShowDialog()
方法也有一个重载,让你指定所有者,如果这是你决定去的路线:型
cdmah0mi3#
如果将父对象(
this
)传递给Owner,如字符串
则可以在子窗体中访问Owner的属性和方法(在本例中为
SavingForm
),前提是需要访问的每个属性的Owner属性**Modifier
设置为Internal
或Public
(您可以直接在源代码中编辑修饰符,也可以通过表单的设计器属性**-每个控件都有一个Modifier
属性)。您可以找到Owner、Parent和ParentForm here之间的差异的很好的解释。
**注意:**像
saving.Show(this);
或saving.ShowDialog(this);
一样传递它在我的情况下没有帮助。