Wie deaktiviere ich ein übergeordnetes Formular, wenn das untergeordnete Formular mit c # aktiv ist?
Wie deaktiviere ich ein übergeordnetes Formular, wenn das untergeordnete Formular mit c # aktiv ist?
Antworten:
Haben Sie versucht, Form.ShowDialog () anstelle von Form.Show () zu verwenden ?
ShowDialog zeigt Ihr Fenster als modal an. Dies bedeutet, dass Sie erst mit dem übergeordneten Formular interagieren können, wenn es geschlossen wird.
this.Hide()
des übergeordneten Formulars im übergeordneten Formularcode auszublenden .
Rufen Sie an ShowDialog()
oder nur Show()
auf Ihrem Kinderformular aus dem Elternformular?
ShowDialog
blockiert den Benutzer für die Interaktion mit dem Formular, das als Parameter an übergeben wird ShowDialog
.
Innerhalb des Elternteils könnten Sie so etwas nennen wie:
MyChildForm childForm = new MyChildForm();
childForm.ShowDialog(this);
Wo this
ist das übergeordnete Formular?
Public childForm As New Childformclass
und childForm.ShowDialog(Me)
wo ich die Klasse Eltern (Elternform) ist, vielen Dank @Philip
Es ist einfach zu bedienen
Form.ShowDialog();
Stattdessen
Form.Show();
Während der Verwendung können Form.ShowDialog()
Sie nicht mit dem übergeordneten Formular interagieren, bis es geschlossen wird.
Sie können sicherstellen, dass Sie das übergeordnete Formular als Eigentümer übergeben, wenn Sie das untergeordnete Formular anzeigen:
Form newForm = new ChildForm();
newForm.Show(this);
Richten Sie dann in der untergeordneten Form Ereignishandler für die Ereignisse Activated
und ein 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;
}
}
Dies führt jedoch zu einem wirklich seltsamen Verhalten. Während Sie nicht sofort zurückkehren und mit dem übergeordneten Formular interagieren können, wird es durch Aktivieren einer anderen Anwendung aktiviert, und der Benutzer kann dann mit ihm interagieren.
Wenn Sie das untergeordnete Formular modal machen möchten , verwenden Sie ShowDialog
stattdessen:
Form newForm = new ChildForm();
newForm.ShowDialog(this);
Während Sie das zuvor erwähnte childForm.ShowDialog (this) verwenden, wird Ihr Hauptformular deaktiviert, es sieht jedoch immer noch sehr deaktiviert aus. Wenn Sie jedoch Enabled = false vor ShowDialog () und Enable = true nach dem Aufruf von ShowDialog () aufrufen, sieht das Hauptformular sogar so aus, als wäre es deaktiviert.
var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;
ChildForm child = new ChildForm();
child.Owner = this;
child.Show();
// In 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
Entschuldigung, dies ist kein C # -Code, aber dies ist das, was Sie möchten. Außerdem sollte die Übersetzung einfach sein.
FORM 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
Hoffe das hilft
Sie können dies mit folgendem tun:
Form3 formshow = new Form3();
formshow.ShowDialog();
Sie können auch das MDIParent-Child-Formular verwenden. Legen Sie das übergeordnete Element des untergeordneten Formulars als übergeordnetes MDI fest
Z.B
child.MdiParent = parentForm;
child.Show();
In diesem Fall wird nur 1 Formular angezeigt und die untergeordneten Formulare werden in das übergeordnete Formular eingefügt. Hoffe das hilft
Für mich funktioniert diese Arbeit hier zum Beispiel, wenn das Hauptmenü deaktiviert wird, wenn Sie das Registrierungsformular öffnen.
frmUserRegistration frmMainMenu = new frmUserRegistration();
frmMainMenu.ShowDialog(this);
Wenn Sie nur versuchen, einen Form.ShowDialog-Aufruf zu simulieren, aber OHNE irgendetwas zu blockieren (ein bisschen wie ein simuliertes Dialogformular), können Sie Form.Show () verwenden. Sobald Sie das simulierte Dialogformular anzeigen, deaktivieren Sie sofort alle anderen Fenster mit etwas wie...
private void DisableAllWindows()
{
foreach (Form f in Application.OpenForms)
if (f.Name != this.Name)f.Enabled = false;
else f.Focus();
}
Wenn Sie dann Ihr "Pseudo-Dialogformular" schließen, rufen Sie unbedingt ....
private void EnableAllWindows()
{
foreach (Form f in Application.OpenForms) f.Enabled = true;
}
Warum nicht einfach die Eltern warten lassen, bis das Kind geschlossen ist? Das ist mehr als Sie brauchen.
// Execute child process
System.Diagnostics.Process proc =
System.Diagnostics.Process.Start("notepad.exe");
proc.WaitForExit();