如何在子表单处于活动状态时禁用父表单?

70 c# winforms

如何在使用c#激活子表单时禁用父表单?

R. *_*des 182

您是否尝试过使用Form.ShowDialog()而不是Form.Show()

ShowDialog将您的窗口显示为模态,这意味着在关闭之前您无法与父窗体交互.


Phi*_*lip 37

您是通过父表格打电话ShowDialog()还是仅仅打电话Show()给您的孩子表格?

ShowDialog将"阻止"用户与作为参数传递的表单进行交互ShowDialog.

在父母中你可以称之为:

MyChildForm childForm = new MyChildForm();

childForm.ShowDialog(this);
Run Code Online (Sandbox Code Playgroud)

this父表格在哪里.


Riz*_*ari 15

它简单,用途

  Form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

代替

  Form.Show();
Run Code Online (Sandbox Code Playgroud)

使用时Form.ShowDialog(),在关闭之前,您无法与父表单进行交互.


Fre*_*örk 10

可以做的是确保在显示子表单时将父表单作为所有者传递:

  Form newForm = new ChildForm();
  newForm.Show(this);
Run Code Online (Sandbox Code Playgroud)

然后,在子窗体中,为ActivatedDeactivate事件设置事件处理程序:

private void Form_Activated(object sender, System.EventArgs e)
{
    if (this.Owner != null)
    {
        this.Owner.Enabled = false; 
    }
}

private void Form_Deactivate(object sender, System.EventArgs e)
{
    if (this.Owner != null)
    {
        this.Owner.Enabled = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这将导致一种真正奇怪的行为; 虽然您将无法立即返回并与父表单进行交互,但激活任何其他应用程序将启用它,然后用户可以与其进行交互.

如果要使子表单模态,请ShowDialog改为使用:

  Form newForm = new ChildForm();
  newForm.ShowDialog(this);
Run Code Online (Sandbox Code Playgroud)


hel*_*dre 7

虽然使用前面提到的childForm.ShowDialog(this)将禁用您的主窗体,它仍然看起来非常禁用.但是,如果在调用ShowDialog()之后在ShowDialog()和Enable = true之前调用Enabled = false,则主窗体看起来甚至会被禁用.

var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;
Run Code Online (Sandbox Code Playgroud)


小智 6

ChildForm child = new ChildForm();
child.Owner = this;
child.Show();
Run Code Online (Sandbox Code Playgroud)

//在ChildForm_Load中:

private void ChildForm_Load(object sender, EventArgs e) 
{
  this.Owner.Enabled = false;
}

private void ChildForm_Closed(object sender, EventArgs e) 
{
  this.Owner.Enabled = true;
} 
Run Code Online (Sandbox Code Playgroud)

来源:http://social.msdn.microsoft.com/Forums/vstudio/en-US/ae8ef4ef-3ac9-43d2-b883-20abd34f0e55/how-can-i-open-a-child-window-and-block-在父窗口只