我最近也有类似的情况。我正在尝试类似的事情,但通过控制来自不同班级的子表单。
注意(S):
您正在尝试将子表单“TopMost”设置为不允许它的东西。
在这种情况下,“MdiContainer”。
要做到这一点:
• 禁用 MainForm 的“isMdiContainer”属性(无论如何,它的使用已经过时了)。
• 将Form(s) TopMost 属性设置为true。
• 您现在应该能够完成您的功能。
**代码示例:**
/* On your Main Form Class */
private void btnSystem_Click(object sender, EventArgs e)
{
// Instantiate the Form_EnterPassword by passing the MainForm
Form_EnterPassword EP = new Form_EnterPassword(this);
EP.Show(); // No longer as modal Form to display in front.
}
/* Under your EnterPassword Form Class */
// Do not create a new Instance of MyMainForm.
// You want to use the same thread as your MainForm
private MyMainForm mainForm;
/* Constructor */
public Form_EnterPassword(MyMainForm form)
{
mainForm = form;
this.Owner = mainForm; // "this" refers to the: EnterPassword Form.
}
备注:
您(可能)必须做的唯一额外的事情,(为了达到完美)是检查 MainForm > WindowState;并创建一个代码块以最小化或使表单进入其特定状态。
IE:
if (WindowState == FormWindowState.Minimized)
{ /* Code to Minimize all the Child Forms. */ }
else { /* Code to bring all Forms to their "Normal" State */ }