web-dev-qa-db-de.com

Wie kann ich das übergeordnete Formular deaktivieren, wenn ein untergeordnetes Formular aktiv ist?

Wie kann ich ein übergeordnetes Formular deaktivieren, wenn das untergeordnete Formular mit c # aktiv ist?

68
vany

Haben Sie versucht, Form.ShowDialog () anstelle von Form.Show () zu verwenden?

ShowDialog zeigt Ihr Fenster als modal an. Dies bedeutet, dass Sie nicht mit dem übergeordneten Formular interagieren können, bis es geschlossen wird.

179

Rufen Sie im übergeordneten Formular ShowDialog() oder nur Show() in Ihrem untergeordneten Formular auf?

ShowDialog "blockiert" den Benutzer von der Interaktion mit dem Formular, das als Parameter an ShowDialog übergeben wird.

Innerhalb des Elternteils können Sie so etwas nennen:

MyChildForm childForm = new MyChildForm();

childForm.ShowDialog(this);

dabei ist this das übergeordnete Formular.

37
Philip

Es ist einfach zu benutzen 

  Form.ShowDialog();

Stattdessen

  Form.Show();

Während der Verwendung von Form.ShowDialog() können Sie nicht mit dem übergeordneten Formular interagieren, bis es geschlossen wird.

15
Rizwan Ansari

Was Sie tun können , ist sicherzustellen, 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 im untergeordneten Formular Ereignishandler für die Ereignisse Activated und Deactivate ein:

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 wird jedoch zu einem wirklich seltsamen Verhalten führen. 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 mit dem Formular interagieren.

Wenn Sie das untergeordnete Formular modal erstellen möchten, verwenden Sie stattdessen ShowDialog:

  Form newForm = new ChildForm();
  newForm.ShowDialog(this);
10
Fredrik Mörk

Während das zuvor erwähnte childForm.ShowDialog (this) verwendet wird, wird das Hauptformular deaktiviert, es wirkt jedoch immer noch sehr deaktiviert. Wenn Sie jedoch Enabled = false vor ShowDialog () und Enable = true aufrufen, nachdem Sie ShowDialog () aufgerufen haben, sieht das Hauptformular sogar so aus, als sei es deaktiviert.

var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;
7
helgeheldre
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;
} 

quelle: http://social.msdn.Microsoft.com/Forums/vstudio/en-US/ae8ef4ef-3ac9-43d2-b883-20abd34f0e55/how-can-i-open-a-chef-window-und Nur das übergeordnete Fenster blockieren

6
stack
Form1 frmnew = new Form1();
frmnew.ShowDialog();
4
sk2185

@ Melodia 

Es tut uns leid, dass dies kein C # -Code ist, aber das ist, was Sie möchten, abgesehen von der Übersetzung sollte dies 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

4

Sie können das mit dem folgenden tun:

Form3 formshow = new Form3();

formshow.ShowDialog();
3
Manish sharma

Sie können auch MDIParent-Child-Formular verwenden. Legen Sie das übergeordnete Formular des untergeordneten Formulars als MDI Parent fest

Z.B

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

In diesem Fall wird nur ein Formular angezeigt, und die untergeordneten Formulare werden in das übergeordnete Element eingefügt. Hoffe, das hilft

2
Nisha

Für mich ist diese Arbeit zum Beispiel hier, was passiert, wenn das Hauptmenü geöffnet wird, wenn Sie das Anmeldeformular öffnen.

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

Wenn Sie lediglich versuchen, einen Aufruf von Form.ShowDialog zu simulieren, OHNE etwas zu blockieren (z. B. ein simuliertes Dialogfeld), können Sie Form.Show () verwenden. Sobald Sie das simulierte Dialogfeld anzeigen, können Sie alle anderen Fenster sofort deaktivieren so 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 auf ....

private void EnableAllWindows()
{
foreach (Form f in Application.OpenForms) f.Enabled = true;
}
0
SnowMan50