子窗体活动时如何禁用父窗体?
如何禁用父窗体时,子窗体活动使用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();