Laden...

Startfenster wieder anzeigen

Erstellt von Thorus vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.977 Views
Thema geschlossen
T
Thorus Themenstarter:in
6 Beiträge seit 2010
vor 12 Jahren
Startfenster wieder anzeigen

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

G
538 Beiträge seit 2008
vor 12 Jahren

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)

T
Thorus Themenstarter:in
6 Beiträge seit 2010
vor 12 Jahren

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...

296 Beiträge seit 2007
vor 12 Jahren

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.

916 Beiträge seit 2008
vor 12 Jahren

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...

S
66 Beiträge seit 2008
vor 12 Jahren

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

L
667 Beiträge seit 2004
vor 12 Jahren

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

49.485 Beiträge seit 2005
vor 12 Jahren

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

Thema geschlossen