| Autor |
Beitrag |
Xardas008
      
Beiträge: 149
Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
|
Verfasst: Mo 27.08.07 17:08
Hi ihr,
folgendes Problem habe ich:
Ich habe in meinem Projekt mehr als 1 Formular. Ein Hauptfenster, wo der User entscheidet was er machen möchte, z.B. einen Neuen Datensatz anlegen, oder einfach nur das Programm beenden.
So das öffnen von einem anderen Formular funktioniert auch soweit. Nur will ich in der Zeit, wo ich z.B. den neuen Datensatz anlege, das Hauptfenster im Hintergrund verstecken, hab ich noch nicht getestet dürfte aber gehen.
So und wenn ich jetzt mit dem Anlegen fertig bin, dann schließe ich das Fenster wieder, so und hier mein Problem, wie bekomme ich das andere Fenster wieder sichtbar?
Ich weiß die Frage hört sich sehr dumm an aber Moderiert von UGrohne: Topic aus C# - Die Sprache verschoben am Mo 27.08.2007 um 18:21
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 27.08.07 18:34
Xardas008 hat folgendes geschrieben: |
So und wenn ich jetzt mit dem Anlegen fertig bin, dann schließe ich das Fenster wieder, so und hier mein Problem, wie bekomme ich das andere Fenster wieder sichtbar? |
Das hängt auch sehr davon ab, wie Du das Hauptformular verbirgst. Untersuche einmal in der SDK-Doku die Stichworte Visible, Form.(De)Activated-Ereignis, Form.ShowInTaskbar-Eigenschaft.
Jürgen
|
|
Xardas008 
      
Beiträge: 149
Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
|
Verfasst: Mo 27.08.07 18:40
Hilft mir leider nicht sehr viel weiter.
mit this.Hide() verstecke ich das Fenster. Normalerweise kann ichs ja mit der Funktion Show() wieder sichtbar machen. Das Problem jedoch ist, dass das Mainfenster in den anderen Formularen nicht sichtbar ist, obwohl public.
Als Verweis einbinden geht nicht, da dies eine Ringdings ergeben würde (ergibt eine Fehlermeldung) was ja auch richtig ist.
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 27.08.07 19:05
Deine Auskünfte sind trotzdem unvollständig. In welchem Zusammenhang (Methode) rufst Du Hide() auf? Wann und wo kommt Form2.Show() oder Form2.ShowDialog()?
Du könntest auch einen Delegate erzeugen, der Form1.Show() ausführt; in Form2.Closing wird dieser Delegate angestoßen. (Das habe ich nur so hingeschrieben, ohne mir die einzelnen Schritte und Voraussetzungen genauer zu überlegen; das musst Du ggf. selbst heraussuchen. Aber eine Möglichkeit ist es jedenfalls: auf diese Weise können Methoden über Formular-Grenzen hinweg arbeiten, auch wenn die Formulare selbst nichts voneinander wissen.)
Jürgen
|
|
Xardas008 
      
Beiträge: 149
Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
|
Verfasst: Mo 27.08.07 19:32
Irgendwie schein ich übermüdet zu sein.
Ich bekomms einfach nicht hin die Methode Show() von der Klasse Form einem Delegate zu übergeben.
Ich versuche oben genannte Frage von dir, JüTho, wo ich das Hide und so aufrufe ma zu erläutern.
Wenn ich auf einen Button auf der Frm_Main klicke, dann wird Form2.Show() aufgerufen, direkt danach soll this.Hide() ausgeführt werden, um das Hauptfenster zu verstecken ohne dass das Programm beendet wird. Funktioniert ja auch einwandfrei. So wenn der User jetzt in Form2 seine Eingabe getätigt hat, soll er wieder zurück zur Frm_Main um dort zu entscheiden was er machen will, z.B. sich alle Datensätze anzeigen lassen. Und da ist mein Problem zur zeit.
|
|
Xardas008 
      
Beiträge: 149
Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
|
Verfasst: Mo 27.08.07 20:48
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public delegate void Fen();
private void Btn_Neu_Click(object sender, EventArgs e) { Frm_Neu Neues_Fenster = new Frm_Neu(); Fen Fens = new Fen(this.Show); Neues_Fenster.Show();
this.Hide();
} |
So habe ich es grade ma versucht, den Delegate meckert er mir jetzt nicht mehr an, jedoch lässt sich dieser trotzdem nicht aus anderen Forms heraus aufrufen. Wieso???? Er kennt meine Variable (Delegate) in den anderen Fenstern nicht.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 27.08.07 22:11
Xardas008 hat folgendes geschrieben: | | Als Verweis einbinden geht nicht, da dies eine Ringdings ergeben würde (ergibt eine Fehlermeldung) was ja auch richtig ist. |
Wie meinen  ?
Und was spricht gegen folgenden Code?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Form details = new DetailsForm(); details.FormClosed += delegate { this.Show(); };
details.Show(); this.Hide(); |
|
|
Xardas008 
      
Beiträge: 149
Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
|
Verfasst: Di 28.08.07 14:32
Khabarakh hat folgendes geschrieben: | Xardas008 hat folgendes geschrieben: | | Als Verweis einbinden geht nicht, da dies eine Ringdings ergeben würde (ergibt eine Fehlermeldung) was ja auch richtig ist. | Wie meinen |
Probiers doch aus, nimm 2 Projekte, binde Projekt1 in Projekt2 ein als Verweis und dann Projekt2 in Projekt1, geht nicht.
Und deshalb sehe ich auch nicht die Member aus Projekt1 in Projekt2 und kann demnach dort nicht drauf zugreifen.
Und das Fenster1 muss aus Fenster2 wieder sichtbar gemacht werden. Oder es muss halt ein Ereignis laufen, welches darauf reagiert, wenn Fenster2 wieder geschlossen wird und dann Fenster1 wieder zum Vorschein bringt.
Nur welches Ereignis könnte dies lösen?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 28.08.07 15:34
Müssen die Forms denn in zwei verschiedenen Projekten sein?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Di 28.08.07 16:06
Hier hast Du doch schon die Lösung bekommen, einzubinden in MainForm.BtnOpenClick():
Khabarakh hat folgendes geschrieben: | Und was spricht gegen folgenden Code?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Form details = new DetailsForm(); details.FormClosed += delegate { this.Show(); };
details.Show(); this.Hide(); | |
Wenn im DetailsForm das FormClosed-Ereignis ausgelöst wird, wird der "namenlose" Delegate gerufen und damit MainForm.Show() ausgeführt.
Jürgen
|
|
Xardas008 
      
Beiträge: 149
Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
|
Verfasst: Di 28.08.07 16:15
Christian S. hat folgendes geschrieben: | | Müssen die Forms denn in zwei verschiedenen Projekten sein? |
Danke dir, genau das war mein Problem. Dadurch dass ich immer nur über Datei Hinzufügen ein neues Projekt hinzugefügt habe, existierten auch verschiedene Namespaces. Deshalb waren die Sachen in den anderen Forms nie sichtbar.
Hab das ganze jetzt in einem Projekt drin und es funktioniert.
|
|