Comment désactiver un formulaire parent lorsque le formulaire enfant est actif à l'aide de c #?
Avez-vous essayé d'utiliser Form.ShowDialog () au lieu de Form.Show () ?
ShowDialog affiche votre fenêtre comme modale, ce qui signifie que vous ne pouvez pas interagir avec le formulaire parent tant qu'il n'est pas fermé.
Appelez-vous ShowDialog()
ou juste Show()
sur votre formulaire enfant à partir du formulaire parent?
ShowDialog
"empêchera" l'utilisateur d'interagir avec le formulaire passé en paramètre à ShowDialog
.
Dans le parent, vous pouvez appeler quelque chose comme:
MyChildForm childForm = new MyChildForm();
childForm.ShowDialog(this);
où this
est le formulaire parent.
C'est simple, utiliser
Form.ShowDialog();
Au lieu
Form.Show();
Lorsque vous utilisez Form.ShowDialog()
, vous ne pouvez pas interagir avec le formulaire parent tant qu'il n'est pas fermé.
Ce que vous pouvez faites, vous devez vous assurer de transmettre le formulaire parent en tant que propriétaire lors de l'affichage du formulaire enfant:
Form newForm = new ChildForm();
newForm.Show(this);
Ensuite, dans le formulaire enfant, configurez les gestionnaires d'événements pour les événements Activated
et 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;
}
}
Cependant, cela entraînera un comportement vraiment étrange; Bien que vous ne puissiez pas revenir en arrière et interagir avec le formulaire parent immédiatement, l'activation de toute autre application l'activera, ce qui permettra à l'utilisateur d'interagir avec celui-ci.
Si vous voulez que le formulaire enfant modal , utilisez ShowDialog
à la place:
Form newForm = new ChildForm();
newForm.ShowDialog(this);
Si vous utilisez le formulaire childForm.ShowDialog mentionné précédemment (this) désactivera votre formulaire principal, il a toujours l’air très désactivé. Toutefois, si vous appelez Enabled = false avant ShowDialog () et Enable = true après avoir appelé ShowDialog (), le formulaire principal aura même l'air d'être désactivé.
var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;
ChildForm child = new ChildForm();
child.Owner = this;
child.Show();
// Dans 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;
}
Form1 frmnew = new Form1();
frmnew.ShowDialog();
@ Melodia
Désolé, ce n’est pas du code C #, mais c’est ce que vous voudriez; outre le fait de traduire cela devrait être facile.
FORMULAIRE 1
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
J'espère que cela t'aides
Vous pouvez le faire avec les éléments suivants:
Form3 formshow = new Form3();
formshow.ShowDialog();
Vous pouvez également utiliser le formulaire MDIParent-child. Définissez le parent du formulaire enfant en tant que parent MDI
Par exemple
child.MdiParent = parentForm;
child.Show();
Dans ce cas, un seul formulaire sera affiché et les formulaires enfants entreront dans le parent . J'espère que cela vous aidera
Pour moi ce travail par exemple ici ce qui se passe est que le menu principal sera désactivé lorsque vous ouvrez le formulaire d'inscription.
frmUserRegistration frmMainMenu = new frmUserRegistration();
frmMainMenu.ShowDialog(this);
Si vous essayez simplement de simuler un appel Form.ShowDialog mais SANS rien bloquer (un peu comme un formulaire de dialogue simulé), vous pouvez utiliser Form.Show () et dès que vous affichez le formulaire de dialogue simulé, désactivez immédiatement toutes les autres quelque chose comme...
private void DisableAllWindows()
{
foreach (Form f in Application.OpenForms)
if (f.Name != this.Name)f.Enabled = false;
else f.Focus();
}
Ensuite, lorsque vous fermez votre "formulaire de pseudo-dialogue", assurez-vous d'appeler ....
private void EnableAllWindows()
{
foreach (Form f in Application.OpenForms) f.Enabled = true;
}