子窗体活动时如何禁用父窗体?

如何禁用父窗体时,子窗体活动使用C#?

你有没有尝试使用Form.ShowDialog(),而不是Form.Show() ?

ShowDialog将窗口显示为模态,这意味着在closures之前您不能与父窗体进行交互。

你是从父窗体调用ShowDialog()还是只Show()你的子窗体?

ShowDialog将“阻止”用户与作为parameter passing给ShowDialog的表单进行交互。

在父母中,你可能会这样称呼:

 MyChildForm childForm = new MyChildForm(); childForm.ShowDialog(this); 

this是父表单。

它简单,使用

  Form.ShowDialog(); 

代替

  Form.Show(); 

使用Form.ShowDialog()您不能与父窗体交互,直到它closures。

可以做什么,是确保在显示子窗体时通过父窗体作为所有者:

  Form newForm = new ChildForm(); newForm.Show(this); 

然后,在子窗体中,为“ Activated和“ Deactivate事件设置事件处理程序:

 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; } } 

但是,这会导致一个真正的奇怪的行为; 虽然您无法立即返回并与父表单进行交互,但启动其他应用程序将启用它,然后用户可以与其交互。

如果您想要使子窗体模式 ,请使用ShowDialog

  Form newForm = new ChildForm(); newForm.ShowDialog(this); 

虽然使用前面提到的childForm.ShowDialog(这个)会禁用你的主窗体,但是它仍然显得非常残疾。 但是,如果在调用ShowDialog()之后,在调用ShowDialog()和Enable = true之前调用Enabled = false,则主窗体甚至看起来像禁用它。

 var childForm = new Form(); Enabled = false; childForm .ShowDialog(this); Enabled = true; 
 ChildForm child = new ChildForm(); child.Owner = this; child.Show(); 

//在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; } 

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

 Form1 frmnew = new Form1(); frmnew.ShowDialog(); 

@Melodia

对不起,这不是C#代码,但这是你想要的,除了翻译这应该很容易。

FORM1

 Private Sub Form1_MouseEnter(sender As Object, e As EventArgs) Handles MyBase.MouseEnter Me.Focus() Me.Enabled = True Form2.Enabled = False End Sub Private Sub Form1_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave Form2.Enabled = True Form2.Focus() End Sub 

FORM2

 Private Sub Form2_MouseEnter(sender As Object, e As EventArgs) Handles MyBase.MouseEnter Me.Focus() Me.Enabled = True Form1.Enabled = False End Sub Private Sub Form2_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave Form1.Enabled = True Form1.Focus() End Sub 

希望这可以帮助

您也可以使用MDIParent子窗体。 将子窗体的父项设置为MDI父项

例如

 child.MdiParent = parentForm; child.Show(); 

在这种情况下,只会显示一个表格,子表格将会进入父表格。 希望这可以帮助

对我来说,这个工作,例如在这里发生的是,当您打开registry单时,主菜单将被禁用。

  frmUserRegistration frmMainMenu = new frmUserRegistration(); frmMainMenu.ShowDialog(this); 

为什么不让父母等待孩子关门呢? 这比你需要的多。

 // Execute child process System.Diagnostics.Process proc = System.Diagnostics.Process.Start("notepad.exe"); proc.WaitForExit();