Laden...

Fenster abfragen

Erstellt von Pellaeon vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.641 Views
P
Pellaeon Themenstarter:in
64 Beiträge seit 2006
vor 17 Jahren
Fenster abfragen

Hallo alerseits,

leider habe ich das Thema per Suche hier noch nicht entdeckt, deswegen muß ich diese triviale Frage mal an Euch richten. (Denke doch das es nicht so schwer sein sollte)

Mein Programm öffnet verscheiden Fenster. Wie kann ich mit meiner Hauptform abfragen, welche Fenster mein Programm schon offen hat und diese gegebenfalls wieder schließen?Ich möchte nicht das bestimmte Fenster erst aktivieren müssen per Maus oder so, also es soll alles von der MainForm aus machbar sein.

Danke Euch im voraus!

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
lege Dir in der Hauptform eine Collection an, der Du alle geöffneten Fenster hinzufügst. Die kannst Du dann durchlaufen und erhälst so die gewünschte Information. Nur nicht vergessen, beim Schließen eines Fensters dieses aus der Collection zu entfernen!

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

P
Pellaeon Themenstarter:in
64 Beiträge seit 2006
vor 17 Jahren

Du meinst in ein ArrayList? Ist ja auch eien Collection oder? Nur was lege ich hinein? Theorie is klar, nur könntest Du mir ein kleines Beispiel geben, wie das ganze praktisch aussieht?

1.665 Beiträge seit 2006
vor 17 Jahren

Du musst dich nicht selber um die FormCollection kümmern. Die wird automatisch gepflegt.
Schau dir mal Application.OpenForms an.


FormXy formTest = new FormXy();
formTest.Show();

// Load Event der zu öffnenden Form
formXy_Load(object sender, EventArgs e)
{
     foreach (Form form in Application.OpenForms)
     {
         if (form.Shown == true)
         {
              form.Activate();
              return;
         }

         form.Show();
     }
}

Eine quick & dirty Lösung, mit der du aber sicherlich erstmal was anfangen kannst. Code nicht getestet 😉

P
Pellaeon Themenstarter:in
64 Beiträge seit 2006
vor 17 Jahren

Aha...schau ich mir mal an. Mal sehen ob ich damit zurecht komme. Danke.

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,

Schau dir mal Application.OpenForms an Das gibts ja auch noch!
Ich habe bei mir öfters typisierte Collections, um direkt Zugriff auf alle offenen Forms eines bestimmten Typs zu bekommen, da ist mir das glatt entfallen!

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

1.665 Beiträge seit 2006
vor 17 Jahren

Original von MarsStein
Hallo,

Schau dir mal Application.OpenForms an
Das gibts ja auch noch!
Ich habe bei mir öfters typisierte Collections, um direkt Zugriff auf alle offenen Forms eines bestimmten Typs zu bekommen, da ist mir das glatt entfallen!

Das hat den Nachteil, welcher für mich nervig ist, wenn ich mit solchen Sachen zu tun habe, dass man die Collection immer mitpflegen muss.

P
Pellaeon Themenstarter:in
64 Beiträge seit 2006
vor 17 Jahren

Problem: Application.OpenForm gitb es nur in FW 2.0. Und ich armes Schwein kann es nicht installieren, weil ich ausschließlich mit FW 1.x arbeiten MUß!!!

HAbt Ihr dann für mich weitere Hinweise?

Sieht wohl so aus, als ob ich so eine Collection selber bauen muß, oder?

1.665 Beiträge seit 2006
vor 17 Jahren

Logo, dann mach dir deine eigene.. bei jedem Show() / ShowDialog() würde ich die Form am besten zu einem Dictionary hinzufügen.


Dictionary<string, Type> formDictionary = new Dictionary<string, Type>();
formDictionary.Add("FormMain", typeof(FormMain));

so ungefähr kannst du das machen.

P
Pellaeon Themenstarter:in
64 Beiträge seit 2006
vor 17 Jahren

Ich hab erst jetzt Deinen Beitrag gelesen. Hab jetzt ein ArrayList mit meinen Forms drinnen:



MyForm form = new MyForm();
form.show();
:
:
mylist.Add(FluidPropsForm);
	

Es wird immer nur eine Form aufgerufen. Ich möchte aber nun über das mylist die Form schließen. Wie kann ich das anstellen? Ich überleg schon ne Weile, komme aber auf keinen Ansatz, bzw fehlt mir das das nötige Wissen.

so nach dem Motto

mylist[0].close();

Das is aber Käse, geht ja so nicht. Aber damit ihr wißt was ich meine 😁

Also mithilfe der mylist die richtige Form schließen.

Hab ich da meinen Finger beim Stichwort "Delegaten" richtig?

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,

Original von Pellaeon

mylist[0].close();  

Das is aber Käse, geht ja so nicht. warum denn nicht? Es stehen doch nur Forms in der Liste oder? Dann kannst Du ja casten:

Form f = (Form)mylist[0];
mylist.Remove(f);
f.Close();

müsste klappen.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

P
Pellaeon Themenstarter:in
64 Beiträge seit 2006
vor 17 Jahren

Jo, so gehts natürlich auch. Ich wollte wieder von hinten durchs Herz ins Auge.
Danke Dir!