Hallo, ich habe zwei kleine Fragen, die ich auch nach Verwenden der Suchfunktion leider nicht habe beantworten können.
(1) Wie erreiche ich es, dass mein Hauptfenster zunächst gezeichnet wird und im Anschluss daran eine 2. Form geöffnet wird? Wenn ich die 2. Form im Load-Event der 1. Form öffne, so wird zunächst nur die 2. Form angezeichnet und erst danach die 1. Form gezeichnet.
(2) Des Weiteren habe ich folgendes Problem: Ich habe ein Hauptfenster, von diesem wird ein OpenFileDialog gestartet. Sendet dieser als DialogResult OK zurück, so öffnet sich eine 2. Form. Diese ist allerdings nicht fokussiert, was sich auch nicht durch die Dienste Focus, Activate oder ähnliches ändern lässt. Woran liegt das und wie behebe ich das Problem?
Danke im Voraus für eine Antwort.
MfG Patros46
(1) Du rufst die zweite Form wohl mit ShowDialog() auf, wodurch du keinen neuen Thread startest. Das macht es den zwei Formen natürlich unmöglich, parallel zu funktionieren. Stattdessen benutzt du hier Show().
(2) Wenn du sie mit ShowDialog() aufrufst, muss sie eigentlich den Fokus haben.
@Patros46: Fürs nächste mal: Bitte immer nur ein Thema pro Thread! Siehe [Hinweis] Wie poste ich richtig? Punkt 1.2.
@bonzy: Nur zur Klarstellung: Auch bei Show wird kein neuer Thread erzeugt. Alle Fenster laufen immer immer in einem Thread (oder sollten das tun) und können trotzdem wunderbar parallel funktionieren. Dass bei ShowDialog nur das eine Fenster zu bedienen ist, bei Show aber beide, hat andere Gründe. Das hat nichts mit Threading zu tun.
(1) Wie erreiche ich es, dass mein Hauptfenster zunächst gezeichnet wird und im Anschluss daran eine 2. Form geöffnet wird? Wenn ich die 2. Form im Load-Event der 1. Form öffne, so wird zunächst nur die 2. Form angezeichnet und erst danach die 1. Form gezeichnet.
Was logisch ist, da zu dem Zeitpunkt, wenn Form_Loaded
geworfen wird, noch nichts angezeigt wird. Das ist erst passiert, wenn Form_Shown
geworfen wurde (mit Einschränkungen).
Für den kontrollierten Aufbau zweier oder mehrerer (gleichberechtigter) Fenster solltest Du Dir mal ApplicationContext
ansehen.
Hinrich
Kleine Ergänzung zu (2):
Ich hab es nochmal getestet. Wenn ich den OpenFileDialog rausnehme, dann ist der Fokus bei meiner Form da, ist OpenFileDialog da, ist der Fokus weg.
Codebeispiel:
OpenFileDialog open = new OpenFileDialog();
if (open.ShowDialog() == DialogResult.OK)
{
FormNeu newform = new FormNeu();
if (newform.ShowDialog() == DialogResult.OK)
{
...
}
}
Probiere mal
newform.ShowDialog(this)
d.h. den Owner explizit anzugeben.
Ansonsten schau mal welche Form bei Form.ActiveForm als derzeit aktive eingetragen ist.
Hier habe ich mal beschrieben wieso so etwas passieren kann.
Was aber nicht heisst, dass es hier aus dem Grund passiert ist... aber es könnte 😃
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Probiere mal
newform.ShowDialog(this)
d.h. den Owner explizit anzugeben.
Danke. Hat funktioniert. 😃