Laden...

Wechseln des Hauptfensters / Hauptfoms während der Laufzeit

Erstellt von Custom vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.988 Views
C
Custom Themenstarter:in
3 Beiträge seit 2008
vor 15 Jahren
Wechseln des Hauptfensters / Hauptfoms während der Laufzeit

Hi,
ich habe ein Problem bei der Erstellung einer Grafikanwendung. Grob gesagt, öffnet mein Programm zunächst ein kleines Fenster, dass mit den Visual C# Assistenten erzeugt wurde und in dem Eingaben gemacht werden. Sind die Eingaben abgeschlossen soll auf einen Button geklickt werden, der die Initialisierung der Grafik (Direct X) startet, das dabei ein neues Fenster erzeugt.

            // Starten einer DirectX Anwendung
            CDirectXHandler DXHandler = new CDirectXHandler();
                       
            DXHandler.Show();
            this.Close();

Durch das Close() am Ende soll da kleine Fenster nun eigentlich geshlossen werden, doch statt dessen schließt sich das ganze Programm.

Ich denke, dass es daran liegt dass an anderer Stelle Application.Run(new ...) eben genau die Erzeugung des kleinen Fensters mit dem Programmstart einleitet und es somit automatisch zum "Hauptfenster" / -form macht. Folglich frage ich euch, wie man vor this.close() (siehe oben) noch das Direct X Fenster zum Hauptfenster machen kann.

Vielen Dank

3.430 Beiträge seit 2007
vor 15 Jahren

Halllo,

und welcome in MyCSharp.de

Durch das Close() am Ende soll da kleine Fenster nun eigentlich geshlossen werden, doch statt dessen schließt sich das ganze Programm.

Ich denke, dass es daran liegt dass an anderer Stelle Application.Run(new ...) eben genau die Erzeugung des kleinen Fensters mit dem Programmstart einleitet und es somit automatisch zum "Hauptfenster" / -form macht. Folglich frage ich euch, wie man vor this.close() (siehe oben) noch das Direct X Fenster zum Hauptfenster machen kann.

Ganz genau.... das this.Close() schliesst in diesem Fall das gesamte Programm.
Denn wenn das Hauptfenster geschlossen wird, dann ist alles weg.
Deshalb würde ich dir empfehlen das Fenster einfach auszublenden, denn das ist die einfachste Lösung.
Verwende einfach this.Hide() oder this.Visible = false

Damit wird das Fenster ausgeblendet, und du kannst dann dein zweites Fenster anzeigen..

mfg
michlG

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Custom,

wenn du nicht willst, dass das Schließen eines Fenster die Anwendung beendet, dann darf die Anwendung kein Main-Window haben oder zumindest darf das zu schließende Fenster nicht das Main-Window sein. Siehe Schließen eines Forms, ohne die komplette Anwendung zu schließen [war: Form- und Codehandling].

herbivore

C
Custom Themenstarter:in
3 Beiträge seit 2008
vor 15 Jahren

Also danke erstmal für beide Tipps!
Echt hilfreich.
Ich habe mich erstmal für die Hide Variante entschieden, denn so verschwindet das Hauptfenster auch aus der Taskleiste.

Werde dann bei der Perfektionierung des Programmes die andere Variante implementieren.

I
1.739 Beiträge seit 2005
vor 15 Jahren

Um zu Ärgern:
Es gibt kein Hauptfenster.

Es gibt aber eine Anwendung(hoffentlich als solche), die in der Lage ist das UI so zu steuern das es tatsächlich benutzbar ist. Nur mal so als Anregung gedacht.
... auf Antwort gespannt.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo ikaros,

Um zu Ärgern:

tja, in der Stimmung warst du wohl gestern leider bei mehreren Posts. Aber bitte las doch deinen Ärger nicht hier im Forum aus und versuche uns auch aus anderen Gründen nicht zu ärgern. Dazu ist ein Forum nicht da.

Es gibt kein Hauptfenster.

Meinst du in dieser Anwendung nicht? Oder überhaupt nicht? Letztes stimmt sicher nicht, wie man in der :rtfm: stehe kann, ist der Parameter von Application Run das MainForm

public static void Run (  
      Form mainForm  
)  

Dass alle Prozesse ein MainForm haben (können), zeigt auch die MainWindowTitle-Property der Process-Klasse.

Es gibt aber eine Anwendung(hoffentlich als solche), die in der Lage ist das UI so zu steuern das es tatsächlich benutzbar ist. Nur mal so als Anregung gedacht.

Ich sehe den Zusammenhang dieser Binsenweisheit zum restlichen Thread nicht, außer dass es genau damit Probleme gab, die dem Poster aber bewusst waren, weshalb er ja auch die Frage gestellt hat und die Probleme auch mittlerweile behoben hat. Naja, aber du wolltest ihn ja wohl auch nur ärgern.

herbivore

I
1.739 Beiträge seit 2005
vor 15 Jahren

Es ging wohl um DirectX und das DirectX nur ein Fenster hat...

C
Custom Themenstarter:in
3 Beiträge seit 2008
vor 15 Jahren

kann es denn sein, dass durch das Hide mein neues Fenster in den Hintergrund "verschoben" wird, nachdem das Hauptfenster unsichtbar ist?
Es ist zwar nicht immer so, aber sobald das DirectX Fenster geöffnet wurde kommt es, wie gesagt, in der Vielzahl der Fälle dazu, dass das DX Fenster an die Taskleiste gesendet wird.

Bei Bedarf kann ich auch gern den Quellcode posten.

S
54 Beiträge seit 2007
vor 15 Jahren
  

this.ShowInTaskbar = false;

sollte dir helfen.

Standardmäßig dürfte aktiviert sein das das fenster mit dem Focus an der Front kämpft.

mit this.focus() oder this.BringToFront() kann man das ändern.