Hi,
Ich habe ein kleines Programm mit 2 Fenster, eines davon wird bei Programmstart angezeigt.
Wenn man nun in diesem fenster auf einen Button drueckt, wird es per this.Hide() verdeckt, und
Days form = new Days();
form.Show();
das 2.Fenster angezeigt, das klappt auch!
Nun moechte aber noch das wenn man auf einen Button im 2.Fenster drueckt das 2.Fenster verdeckt wird per this.Hide(), und das 1.Fenster wieder angezeigt, das klappt allerdings nicht, da die Methode formStart.Show(); nicht existiert!
Definiert wird das Fenster in Program.cs per:
formStart startFenster = new formStart();
Application.Run(startFenster);
Was mache ich falsch?
Danke
Thorus
formStart hat wohl keine statische Methode .Show().
Nur weil es in Programm.cs definiert und genutzt wird (im übrigen wird es als "startFenster" definiert) heißt das nicht, dass du es überall einfach so benutzen kannst.
Ich vermute dir Fehlen noch ein paar Grundlagen zu Objekt Orientiertheit - insbesondere zu Scopes:
🛈 📗
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Ahja sry, Visual Studio laeuft an nem Rechner ohne Internet deswegen kann ich kein Copy-Paste machen,
eig fehlt mir die Erfahrung in C#, Objektorientiert hab ich jetzt schon mehreres gemacht...
Die Methode existiert an sich, nur wie du schon richtig bemerkt hast, laesst er mich nicht auf das Objekt zugreifen...
Hallo Thorus,
Die Methode existiert an sich, nur wie du schon richtig bemerkt hast, laesst er mich nicht auf das Objekt zugreifen...
und genau aus diesem Grund hat dich Grumbler85 explizit aufgefordert, dich mit Scopes zu beschäftigen.
Es ist logisch, dass du die Variable, die du in der statischen Main-Methode definierst, nicht aus irgendeinem Objekt heraus sehen kannst.
Hi Thorus,
im übrigen wäre die Show Methode nicht das was du brauchst, vielmehr brauchst du die Form.Activate() Methode weil du ja deine Form nur wieder aktivieren willst, gezeigt wird sie ja bereits soweit ich das dem Text entnehmen kann.
Im übrigen ist das auch ein Fall für Kommunikation zwischen 2 Forms.
Again what learned...
Hi Thorus,
füge doch in deiner 2. Form einfach
this.Hide();
Application.OpenForms["NameDeinerErstenForm"].Show();
ein und schon sollte es deinen gewünschten Effekt erzielen.
EDIT: Du solltest auf jeden Fall aufpassen, dass du nicht immer wieder eine neue Instanz deiner 2. Form erzeugst und diese dann nur mit "this.Hide()" versteckst.
Je nachdem was du machen möchtest solltest du auch hier z.B. "Application.Openforms" benutzen oder dir besser gleich das hier
Im übrigen ist das auch ein Fall für
> mal genauer anschauen.
MfG
SirFoldabit
Dein "Days" Form kennt die startForm Instanz nicht, deshalb kann es auch darauf nicht zugreifen (Stichwort Scopes).
Am Einfachsten ist es, wenn Du beide Forms untereinander bekannt machst, z.B. so :
Program.cs
formStart startFenster = new formStart();
Days dayFenster = new Days();
startFenster.PartnerForm = dayFenster;
dayFenster.PartnerForm = startFenster;
Application.Run(startFenster);
In den beiden Forms muss dann natürlich noch jeweils das Property PartnerForm definiert werden
public Form PartnerForm {get; set;}
Dann kann man aus dem startFenster bzw. aus dem dayFenster mit
this.Hide();
PartnerForm.Show();
hin- und her switchen.
"It is not wise to be wise" - Sun Tzu
Hallo Lynix,
Am Einfachsten ist es, wenn Du beide Forms untereinander bekannt machst
am einfachsten vielleicht, am saubersten sicher nicht. Fenster sollten sich immer nur in eine Richtungen kennen. In [FAQ] Kommunikation von 2 Forms wird beschrieben, wie Forms in beide Richtungen miteinerander kommunizieren können, ohne sich gegenseitig kennen zu müssen. Diesen Weg solle man vorziehen.
Hallo Thorus,
hier haben wir einen Fall für [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.
herbivore