Form.ShowDialog ueberschreiben
-
Hallo,
Ich hab eine eigen Form. Wenn diese Form mittels ShowDialog geoeffnet wird, moechte ich, dass ein paar eigene Funktionen gestartet werden.
Nun habe ich aber nicht die Moeglichkeit, ShowDialog zu ueberschreiben, weil's nicht abstract/virtual ist.
Was muss ich ueberschreiben, damit meine Funktionen dann gestartet werden, wenn ShowDialog aufgerufen wird?
Danke im Voraus...
-
Wenn deine Funktionen starten bevor oder nach Showdialog dann rufe sie dort auf. Wenn sie im aufzurufenden Dialog starten sollen dann starten sie eben dort.
-
In welcher Funktion des Formulars muss ich sie aufrufen?
Oder sollte ich auf ein Ereignis (OnActivated vielleicht?) reagieren.
Es soll genau dann losgehen, sobald das Formular durch ShowDialog sichtbar wird.
-
Reagier doch einfach auf's 'Load'-Event. Das ist der Standardweg. Warum kreativ werden, wenn's so einfach geht?
-
Naja, es könnte ja sein, das die Form bei Closing mit Hide() unsichtbar gemacht wird und später wieder mit ShowDialog angezeigt werden soll.
Load wird ja dabei nur einmal aufgerufen, Active immer dann wenn die Form den Fokus erhält.
Was wäre denn für einen solchen Fall eine elegante Umsetzung für den geforderten Fall ?
-
Knuddlbaer schrieb:
Naja, es könnte ja sein, das die Form bei Closing mit Hide() unsichtbar gemacht wird und später wieder mit ShowDialog angezeigt werden soll.
Load wird ja dabei nur einmal aufgerufen
Nein. 'Load' würde auch hier beim zweiten Anzeigen wieder aufgerufen.
-
Stimmt, thx
-
Ok, ich bin hier nun doch irritiert.
Das ganze drehte sich die Thematik: ShowDialog -> Immer Load , Show -> nur einmal Load.
Ich habe hierzu in der MSDN nichts gefunden, bin aber auf diesen Beitrag gestossen:
http://thedotnet.com/nntp/92153/showpost.aspx
The method Control.Show calls Control.SetVisibleCore method that checks
for window.Handle initialization. If initialization has not been
implemented, it would call Control.CreateControl (initialization,
Form.OnCreateControl call, Form.OnLoad). That's why you see only one
OnLoad event.Schaut mal mal mit dem Reflactor in den Code, findet man tatsächlich base.CreateControl(); Ich habe in dem Quellcode dann auf die schnelle das OnLoad nicht mehr nachvollziehen können. (So tief kenne ich mich mit den Details nicht aus).
Ok, ich sehe das Verhalten in der Implementierung der Lib wieder. Hat zufällig jemand das passende Gegenstück in der Doku (MSDN) oder ein paar Stichworte um weiterführende Eregbnisse per Google zu finden ?
-
Ich hab jetzt das richtige Ereignis gefunden: OnShown ueberschreiben...