c# - 指定了不是mdicontainer的表單當做是該表單的mdiparent的表單 - 如何在子表單處於活動狀態時禁用父表單?




winform mdi form (9)

如何在使用c#激活子表單時禁用父表單?


@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

希望這可以幫助


你可以做到這一點。

Form3 formhow = new Form3();

formshow.ShowDialog();


它簡單,用途

  Form.ShowDialog();

代替

  Form.Show();

使用Form.ShowDialog()您無法與父窗體交互,直到它關閉。


對我來說,這項工作例如在這裡發生的事情是打開註冊表單時將禁用主菜單。

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

您也可以使用MDIParent-child表單。 將子表單的父項設置為MDI Parent

例如

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

在這種情況下,只顯示一個表單,子表單將進入父表單。 希望這可以幫助


您是否嘗試過使用Form.ShowDialog()而不是Form.Show()

ShowDialog將您的窗口顯示為模態,這意味著在關閉之前您無法與父窗體交互。


為什麼不讓父母等待孩子關閉。 這比你需要的多。

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

雖然使用前面提到的childForm.ShowDialog(this)將禁用你的主窗體,它仍然看起來非常禁用。 但是,如果在調用ShowDialog()之後在ShowDialog()和Enable = true之前調用Enabled = false,則主窗體看起來甚至會被禁用。

var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;

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




winforms