Eine versteckte Form anzeigen

8

Wie zeige ich eine davon, die mit

ausgeblendet wurde? %Vor%

Ich habe es versucht

%Vor%

und das sagt nur, ich brauche ein Objekt ref. Ich habe dann versucht:

%Vor%

Welche scheint die entsprechende Form zu zeigen. Aber wenn Sie die App beenden, wird sie immer noch im Speicher gehalten, weil sie das ausgeblendete Formular nicht angezeigt hat, stattdessen hat sie eine neue Version des Formulars angezeigt. In der Tat mit 2 Instanzen des Formulars (eine versteckte, eine sichtbare).

Nur um zu verdeutlichen, das MainMenuForm ist das Startformular. Wenn beispielsweise auf Option 1 geklickt wird, blendet sich das MainMenuForm-Objekt beim Öffnen des Option 1-Formulars aus. Was ich gerne wissen würde, ist, wie ich das Option 1-Formular mache, das das MainMenuForm öffnet, das MainMenuForm "einblendet" und dann sich selbst schließt.

Was ist die richtige Vorgehensweise hier?

Vielen Dank im Voraus.

    
Arcadian 09.06.2010, 12:26
quelle

7 Antworten

20

Wenn Sie Folgendes tun:

%Vor%

Sie erstellen und zeigen eine neue Instanz der MainMenuForm.

Um eine Instanz der MainMenuForm anzuzeigen und auszublenden, müssen Sie einen Verweis darauf halten. I.e. Wenn ich Framework-Apps komprimiere, habe ich statische Klassen, die das Singleton-Muster verwenden, um sicherzustellen, dass ich zur Laufzeit immer nur eine Instanz eines Formulars habe:

%Vor%

Jetzt können Sie einfach FormProvider.MainMenu.Show() verwenden, um das Formular anzuzeigen, und FormProvider.MainMenu.Hide() , um das Formular auszublenden.

Das Singleton-Muster (Danke an Lazarus für den Link) ist eine gute Möglichkeit, Formulare in WinForms-Anwendungen zu verwalten, da Sie die Formularinstanz nur einmal erstellen müssen. Beim ersten Zugriff auf das Formular über die entsprechende Eigenschaft wird das Formular instanziiert und in einer privaten Variablen gespeichert.

Wenn Sie beispielsweise FormProvider.MainMenu zum ersten Mal verwenden, wird die private Variable _mainMenu instanziiert. Bei jedem weiteren Aufruf von FormProvider.MainMenu wird _mainMenu sofort zurückgegeben, ohne erneut instanziiert zu werden.

Sie müssen jedoch nicht alle Ihre Formularklassen in einer statischen Instanz speichern. Sie können das Formular nur als eine Eigenschaft in dem Formular verwenden, das das MainMenu steuert.

%Vor%

UPDATE:

Bitte lesen Sie, dass MainMenuForm Ihr Startformular ist. Implementieren Sie eine Klasse, die meinem obigen Singleton-Beispiel ähnelt, und ändern Sie dann in der Datei Program.cs Ihrer Anwendung den folgenden Code:

%Vor%

Sie können dann von überall in Ihrer Anwendung aus über die Klasse MainMenuForm auf FormProvider zugreifen.

    
GenericTypeTea 09.06.2010, 12:33
quelle
1

Sie müssen einen Verweis auf das erste Formular beibehalten, wenn es erstellt wird, und dann kann der Code, der diese Referenz enthält, Show darauf aufrufen.

Wenn Sie dieses Formular nicht von irgendwo öffnen, es aber als Startformular festgelegt ist, müssen Sie es entweder ändern, sodass Sie eine Main-Methode zum Öffnen des Formulars haben, oder Sie können dieses Formular als Verweis auf sich selbst speichern lassen irgendwo, auf das von anderen Orten zugegriffen werden kann.

Ein schneller und hässlicher Weg wäre beispielsweise, eine öffentliche statische Eigenschaft zu Ihrem Hauptformular hinzuzufügen und dann, wenn Sie das Formular ausblenden, auch this auf diese Eigenschaft zu schreiben, die dann abgerufen werden kann, wenn sie von anderen Teilen benötigt wird der Code.

    
Hans Olsson 09.06.2010 12:33
quelle
1

Der einfachste und einfachste Weg besteht darin, LINQ zu verwenden und in die Eigenschaft Application.OpenForms zu schauen. Ich gehe davon aus, dass Sie nur eine Instanz des Formulars haben (hoffentlich!), Andernfalls stellen Sie sicher, dass Sie eine öffentliche Eigenschaft auf dem verborgenen Formular haben müssen, um es unterscheiden zu können.

Der folgende Code wird das Formular für Sie ausblenden:

%Vor%     
code4life 09.06.2010 13:26
quelle
1

Praktisch Das funktioniert für mich ....

%Vor%

ruft es durch ein Klickereignis auf.

%Vor%     
Padmanaban Gokula 03.09.2014 17:53
quelle
0

Speichern Sie einen Verweis auf das Formular und rufen Sie .Hide () und .Show () dazu auf.

Zum Beispiel:

%Vor%

In diesem Beispiel wird davon ausgegangen, dass Sie ein Formular haben, das MainMenuForm startet.

    
Paolo 09.06.2010 12:34
quelle
0

Rufen Sie das referenzierte Formular auf.

Wie:

%Vor%     
Ralf de Kleine 09.06.2010 12:34
quelle
-1

Eine andere einfachere Methode, dies zu erreichen, besteht darin, die offenen Formulare durchzublättern, um zu sehen, welche noch laufen, und sie zu öffnen ...

%Vor%     
RunninThruLife 24.03.2014 20:39
quelle

Tags und Links