Form verhält sich komisch
-
Ich hab leider zu wenig Ahnung von , aber was ist denn das Problem mit dem ApplicationContext ? Aus den Diskussionen im Originalthread werde ich nicht so recht schlau und nachvollziehen kann ich die Probleme wegen MessageBox und SafgeDialog nicht:
http://www.rothmichael.de/cpp/SplashTest2.zip
Gibst mir mal nen schubs in die richtige Richtung ?
-
Also .net ist für mich ja auch neu, aber es scheint wohl einfach um einige Context-Verknüpfungen zu gehen, die threadspezifisch sind. Also wenn man dieses Application::Run ausführt (oder eben auch die ApplicationContext Geschichte aus dem Thread so verwendet), dann ist es anscheinend nicht damit getan, dass man die Verweise innerhalb dieser Context-Klasse einfach ändert und somit den Gesamt-Thread-Context geändert hat. Ist auch irgendwie logisch, denn Application::Run erstellt ja auch einen neuen Thread und genau der lässt sich nicht einfach mal so seinen Context verschieben.
Ich versuch's mal mit neuen Threads oder einfach mit dem Backgroundworker und poste dann meine Erfahrungen.
-
Eigentlich geht es ja nur darum, dass nicht immer das Update() ausgeführt werden muss... quasi...
-
Komisch - bei mir funktioniert das Beispielprogramm auch ohne Probleme und eben ohne diese, im Original-Thread, beschriebene Fehlermeldung.
-
So - jetzt bin ich auch angemeldet
Bei Splash2 verstehe ich nicht, warum beim Load-Event eben die MessageBox nicht angezeigt wird, sondern erst nach Ablauf der Zeit oder schliessen des Fensters. Das ändert sich auch nicht, wenn man aus dem Load-Event ein Show-Event macht.
Normalerweise müssten diese beiden Events ja sofort ausgeführt werden, das hängt wohl mit ApplicationContext zusammen - also irgend etwas läuft da auch so nicht rund.
-
Wieso ? Das Verhalten ist gewünscht.
if(sender->Equals(splashForm)) { ApplicationContext::MainForm = mainForm; ApplicationContext::MainForm->Show(); } else if(sender->Equals(mainForm)) { ApplicationContext::OnMainFormClosed(sender,e); }
Erst wenn SPlashScreen zu geht und das CloseEvent feuert wird die Form getauscht und die Mainform angezeigt.
-
Irgendwie war das Forum weg. Aber das war wohl nur ein Schnellschuss von mir *g*
Ich hatte natürlich nicht gelesen, welches Form zuerst erscheint... dachte Form1.private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { MessageBox::Show("Test"); }
Das meinte ich (aber hatte da eben die Forms verwechselt - so ist klar, dass da diese MessageBox erst nach schliessen des ersten Fensters auftaucht.
-
Ah jetzt ja
Vllt. hat ja noch jemand einen Hinweis auf die Problematik mit dem AppContext - ich hab nun das Gefühl das die Lösung "dirty" ist und hab (noch) nicht das know how das zu beurteilen :o(
-
Ich bin nun nicht auf meinem PC, also kann ich den Link nicht posten, aber da ist sehr aufschlussreiches Material in der Visual Studio Hilfe - speziell unter Klassen ApplicationContext (hätte ich auch früher drauf kommen können). Sieht genauso aus, wie ich mir das erhofft hatte und scheint doch ziemlich clean zu sein. Mehr noch... das Beispiel mit dem Splash-Screen kompliziert das Ganze irgendwie *g*
Vereinfacht: Man muss keine Form-Klasse in Application::Run starten... es genügt ein Kontext... also eine von ApplicationContext abgeleitete Klasse, in der man dann seine Forms erstellen, verwalten, etc. kann
EDIT: ... und natürlich diese dann mit Application::Run starten.Heute Nacht hatte ich da noch einen unsinnigen Fehler (irgendwie hat VS wohl ein Problem), aber wenn das heute Abend clean funktioniert, dann poste ich das mal.
-
Macht das die Klasse aus der FAQ nicht ?
-
Sie macht das schon, nur etwas komplizierter (nach meinem Verständnis), da hier die Forms noch im Konstruktor angegeben werden. Aber im Endeffekt kann man in diese abgeleitete Klasse soviele Forms integrieren, wie man will (sowieso) und diese müssen dann nicht zugewiesen werden, etc. Der Context ist die Klasse und nicht, wie ich annahm, das MainForm (war dumm, ich weiss). Innerhalb der Klasse müssen dann einfach die Show/Close-Events so abgefangen werden, dass die Klasse weiss, ob nun wirklich alles geschlossen ist und diese dann eben terminieren kann.
Und somit ist man doch völlig frei in der Handhabe. Nur habe ich das eben noch nicht getestet und weiss nicht, ob nun auch Update() noch nötig ist, oder eben nicht.
-
Ok, sehe ich noch nicht so den Unterschied
Ich habs im Konstruktor lieber weil ich die Klassen dann besser für viele Projekte nehmen kann Wäre prima wenn Du den Link posten könntest am abend, in der MSDN verläuft man sich manchmal ober findet die passende stelle einfach nicht
-
Kenne ich *g*
Und mache ichUnd ansonsten hatte ich da nur den Denkfehler (oder auch /pure Dummheit), indem ich mir den überladenen Konstruktor nicht genauer angesehen hatte (naja... den hätte ich auch nicht wirklich zuordnen können). Denn Application::Run gibt es einmal mit einer Form und einmal eben mit einem Kontext. Da ich nur die Forms als Parameter gesehen hatte... dummer Fehler eben
-
So - hier mal der Link:
ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.de/cpref17/html/T_System_Windows_Forms_ApplicationContext.htm
-
Verdammt, dachte MSDN = MSDN :o(
Ist es dieser hier ?:
http://msdn2.microsoft.com/de-de/library/system.windows.forms.applicationcontext.aspx
-
Genau das ist er, ja
-
Dann wäre das der passende Link für den FAQ Artikel, aber ich glaub Jochen hängt mich auf wenn ich nachfrag ;o)
Ok, da steht eigentlich das gleiche wie in dem Artikel der FAQ - ich habs halt umständlich aus dem C# Code zusammen gebaut O Danke für den Link!
-
Hihi - na wenn ich das so habe, wie ich es mir vorstelle, dann werde ich das posten. Du ja vielleicht auch? Somit sollte das ja kein Problem darstellen
-
Knuddlbaer schrieb:
aber ich glaub Jochen hängt mich auf wenn ich nachfrag
So schlimm bin ich doch nicht, oder?
-
Nein, sehr nett zuvorkommend und Hilfsbereit, aber irgendwann sicherlich genervt wenn ich als wegen FAQ nachbessern frage
Mein Anliegen wäre nun, zur vervollständigung des FAQ Beitrages zum Splashscreen folgenden Link einzufügen:
http://msdn2.microsoft.com/de-de/library/system.windows.forms.applicationcontext.aspx
Vielen vielen Dank!