Laden...

Minimize mehrere Forms gleichzeitig

Erstellt von tbd vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.355 Views
T
tbd Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren
Minimize mehrere Forms gleichzeitig

Hallo zusammen,

ich will mit C# in .NET folgendes erreichen:

Beim minimieren der/einer Hauptform sollen alle anderen Forms, welche von der Hauptform erstellt wurden auch minimiert werden. Das gleiche soll auch umgekehrt funktionieren.

Folgendes habe ich bereit schon getestet, hat mich aber nicht zufrieden gestellt


public Form1()
{
    InitializeComponent();
    this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
}

// bei jedem Button-Klick ein neues Fenster erstellen
private void button1_Click(object sender, EventArgs e)
{
    Form2 f1 = new Form2();
    f1.MinimizeBox = false;
    f1.MaximizeBox = false;
    f1.ShowInTaskbar = false;
    f1.Show();
}

// Sobald das Hauptfenster minimiert wird, werden auch alle weitere
// bekannten Fenster geschlossen
private void Form1_SizeChanged(object sender, System.EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        foreach (Form frm in Application.OpenForms)
            frm.WindowState = FormWindowState.Minimized;
    }

    else if (this.WindowState == FormWindowState.Normal)
    {
        foreach (Form frm in Application.OpenForms)
            frm.WindowState = FormWindowState.Normal;
    }
}

Das Problem hierbei ist, dass zwar alle Fenster minimiert werden, jedoch ist das
a) sehr langsam
b) sind alle Fenster noch klein links unten dargestellt.

Ich hätte gerne, dass ich eine "Haupt"-Form hab, welche dann beliebig viele neue Forms erstellt. Diese neuen Forms haben alle keinen Minimize und Maximize Button. Wenn ich die Hauptform in die Taskbar Minimiere, dann hätte ich gerne, dass alle anderen erzeugten Fenster auch sofort minimiert werden, jedoch OHNE dass diese Fenster noch irgendwo sichtbar sind (weder in der Taskbar noch sonst irgendwo auf dem Desktop).
Zudem sollen alle Fenster (außer das Hauptfenster) zu keiner Zeit in der Windows-Fensterauswahl (ALT + TAB) sichtbar sein.

Viele Grüße, tbd

S
443 Beiträge seit 2008
vor 12 Jahren

Klingt irgendwie wie ein interessantes Anwendungsgebiet für MDI?

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

1.820 Beiträge seit 2005
vor 12 Jahren

Hallo!

Ansonsten hilft dir vielleicht die Hide-Methode für die anderen Fenster.
Und dass diese Fenster nicht in der Taskleiste angezeigt werden, erreicht man mit der Eigenschaft ShowInTaskbar

Nobody is perfect. I'm sad, i'm not nobody 🙁

T
tbd Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

@spike 24: hab ich vergessen zu erwähnen: Es soll nicht über MDI gelöst werden.
@tom-essen: danke für den Tipp, habs grad auch noch über Visible erreicht.

Jetzt brauch ich nur noch eine Lösung für das Problem: Wie kann ich erreichen, dass bestimmte Forms nicht in der Fenster-Wechsel-Auswahl (ALT + TAB) erscheinen?

S
443 Beiträge seit 2008
vor 12 Jahren

Du könntest die Property "ShowInTaskbar" probieren.

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

T
tbd Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

wenn ich "showInTaskbar" auf "false" setzte, dann wird das Fenster zwar nicht in der Taskbar angezeigt, trotzdem bekomm ich es zur Auswahl, wenn ich über ALT+TAB ein anderes Fenster auswähle.

K
142 Beiträge seit 2006
vor 12 Jahren

Hallo,

wenn die Forms eh keinen Minimieren/Maximieren-Button haben sollen, kannst du doch FormBorderStyle=SizableToolWindow verwenden.

Grüße, Koller.

T
tbd Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

Vielen Dank, jetzt hab ich erst mal, was ich brauche.

Allerdings frage ich mich noch ob es vllt. auch eine Möglichkeit gibt, dass die Funktionalität der "Form1_SizeChanged"-Funktion in der Main-Form automatisch vom Framework übernommen wird. Kann so was vllt. über eine Vater-Kind-Beziehung zwischen den Forms erreicht werden (Ich mein mit Borland C++ war das irgendwie möglich)?

Ich würde gerne vermeiden, dass ich in der Main-Form in einer Schleife über alle "OpenForms" iterieren muss.

K
142 Beiträge seit 2006
vor 12 Jahren

Hallo,

wie wäre es mit der Form.Owner-Eigenschaft?

When a form is owned by another form, it is minimized and closed with the owner form

Grüße, Koller.

T
tbd Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

Prima, genau das hab ich gesucht, vielen Dank!