Как отключить родительскую форму, когда дочерняя форма активна с помощью С#?
Как отключить родительскую форму, когда активна дочерняя форма?
Ответ 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;
Ответ 6
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;
}
Ответ 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();