C#-Formular anzeigen, dass schon geladen ist

Luky

Grünschnabel
Hallo zusammen,
ich möchte von VB 6 auf C# umsteigen.
In VB wird durch das Ereignis "Form1.Show" das Formular "Form1" geladen und angezeigt. Wenn weitere Formulare und das Formular "Form1" selbst schon geladen und angezeigt wird, wird durch das Show-Ereignis das geöffnete Formular als das aktive Formular in den Vordergrund gestellt.

Nun meine Frage:
In C# muss ich eine Instanz auf das Formular "Form1" setzen bevor ich es Laden kann (Form1 f 1= new Form1 => f1.show). Hierbei wird jedesmal ein neues Formular geladen. Wie bekomme ich es hin, dass das geladene Formular beim nächsten Show-Ereignis als aktives Formular (wenn es denn schon geladen und angezeigt ist) gesetzt wird ?

Schönen Dank schon einmal im voraus.

mfg Luky
 
Die Form global laden und dann einfach abfragen ob es eine Instanz gibt oder nicht. Wenn ja, dann visible setzen, wenn nicht, dann neu instanzieren.
 
Hallo Norbert,

schönen Dank erst einmal für Deine Antwort.
Hast Du vieleicht ein Beispiel für mich ? Ich habe nämlich keine Ahnung, wie ich eine vorhandene Instanz abfrage.


mfg Luky
 
Hi,
Code:
public class Test
{
	private Form1 f1; // global setzen

	public Test()
	{
		this.f1 = new Form1();
	}

	private void ShowForm1()
	{
		if(f1 != null)  // abfrage ob instanz existiert
			f1.Visible = true;
		else // wenn keine instanz existiert, eine neue erstellen
		{
			f1 = new Form1();
			f1.Show();
		}
	}
}
 
Hallo Norbert,
funktioniert alls prima. Nun meine nächste Fragen:
Warum wird das Formular "Form1" nicht wieder angezeigt, wenn ich es einmal geschlossen habe ? Wie hebe ich die Instanz wieder auf ? Mit "Form1 = null;" funktioniert es nicht. Wie kann ich auf "f1" , das ich im Main-Formular global deklariert habe von Form1 zugreifen ?


mfg Luky
 
Wenn du die Form schließt, wird die Instanz zerstört und somit gibt es diese Form dann nicht mehr und muss neu instanziert werden.

Instanz zerstören:
Form1.Close();

Ja, du kannst darauf zugreifen .. indem Du diese als public deklarierst. Was aber wenig Sinn macht, weil du innerhalb der Form1 ja mit dem Schlüsselwort
this auf die Form zugreifen kannst.
 
Hi Norbert

besten Dank für Deine Hilfe.


Das Zugreifen auf die unterschiedlichsten Formulare klappt nun. Wie sieht es z.B. mit anderen Zugriffen aus ?

Beispiel: Ich habe ein Main-Formular, in dem ich zwei unterschiedliche Menüs erstellt habe (mainMenuDefault und mainMenuNoConnect). Das Einloggen eines Users erfolgt über die Form "fLogin" (Abfrage an die Datenbank). Wird dieser Einloggevorgang vom User abgebrochen, so soll das Menu "mainMenuNoConnect" aus dem Formular "fLogin" für das Main-Formular gesetz werden.

Code aus Formular "fLogin"

private void btnAbbrechen_Click(......)
{
// Wie muss hier der Code aussehen ?
// mainMenuNoConnect ist an dieser Stelle unbekannt !
fMain.ActiveForm.Menu = mainMenuNoConnect;
}



mfg Luky
 
Auf welcher Form liegt denn mainMenuNoConnect ? Auch auf deiner fMain? Wenn ja, dann musst du

fMain.mainMenuNoConnect

angeben.

Norbert
 
Hi Norbert,

ja es liegt auf def Form "fMain".

Code aus Formular "fLogin"

private void btnAbbrechen_Click(......)
{
fMain.ActiveForm.Menu = fMain.mainMenuNoConnect;
}

fMain. => hier werden nach der Eingabe vom Punkt die public-Variablen und Eigenschaften angezeigt aber nicht das Menue "mainMenuNoConnect".
z.B.
- ActiveForm
-fLogin
-fMain
- etc.

Das was hinter dem Gleichheitszeichen steht, wird angemeckert.
 

Neue Beiträge

Zurück