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
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
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
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.
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.
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
Es ging wohl um DirectX und das DirectX nur ein Fenster hat...
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.
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.