Как отключить родительскую форму, когда активна дочерняя форма?

Как отключить родительскую форму, когда дочерняя форма активна с помощью С#?

Ответ 1

Вы пробовали использовать Form.ShowDialog() вместо Form. Show()?

ShowDialog показывает ваше окно как модальное, что означает, что вы не можете взаимодействовать с родительской формой до ее закрытия.

Ответ 2

Вы вызываете ShowDialog() или просто Show() в вашей дочерней форме из родительской формы?

ShowDialog "заблокирует" пользователя от взаимодействия с формой, которая передается как параметр ShowDialog.

Внутри родителя вы можете вызвать что-то вроде:

MyChildForm childForm = new MyChildForm();

childForm.ShowDialog(this);

где this является родительской формой.

Ответ 3

Прост, используйте

  Form.ShowDialog();

Вместо

  Form.Show();

При использовании Form.ShowDialog() вы не можете взаимодействовать с родительской формой до ее закрытия.

Ответ 4

Что вы можете сделать, это убедиться, что вы передаете родительскую форму владельцу, показывая дочернюю форму:

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

Однако это приведет к поистине странному поведению; в то время как вы не сможете вернуться назад и немедленно взаимодействовать с родительской формой, активирует любое другое приложение, а затем пользователь сможет взаимодействовать с ним.

Если вы хотите сделать дочернюю форму modal, используйте ShowDialog вместо:

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

Ответ 5

При использовании ранее упомянутого childForm.ShowDialog(это) отключит вашу основную форму, но по-прежнему выглядит очень сильно. Однако если вы вызываете Enabled = false перед ShowDialog() и Enable = true после вызова ShowDialog(), основная форма будет выглядеть так, как будто она отключена.

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

Ответ 7

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

Ответ 8

@Melodia

Извините, что это не код С#, но это то, что вы хотели бы, помимо перевода это должно быть легко.

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

Надеюсь, что это поможет

Ответ 9

Вы также можете использовать форму MDIParent-child. Установите родительскую форму родителя как родительский родительский учет

Например,

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

В этом случае будет отображаться только одна форма, и дочерние формы войдут внутрь родителя. Надеюсь, что это поможет

Ответ 10

Для меня эта работа, например, здесь, что произойдет, главное меню будет отключено при открытии регистрационной формы.

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

Ответ 11

Почему бы не просто родителям подождать, пока ребенок закроется. Это больше, чем вам нужно.

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