Dynamische Gadgets sind dann sinnvoll, wenn man vorher nicht weiss, wieviele Gadgets man am Ende eigentlich haben wird.kartmanne hat geschrieben:Ich habe in den Fenstern bis zu ca. 50 gadgets, auch Text-Gadgets, die verändert werden können und werden (wenn die COM Daten liefert). Insoweit ist mir eine Struktur, die die Aktionen der Fenster "clustert" übersichtlicher, als wenn ich die "eventtypen" clustere.
Zum Beispiel, wenn Du einen Visual Designer programmierst.
Dann hast Du ja vorher keine Ahnung, wieviele Gadgets der User erstellen möchte.
Aber manche stehen auch grundsätzlich auf dynamische Erzeugung, das ist nicht verwerflich, aber man muss etwas besser aufpassen und natürlich einen ganzen Sack Variablen mit sich rumschleifen (das ist der eigentliche Grund, warum ich persönlich das nur dann nutze, wo es Sinn macht).
Ja bei break scheiden sich die Geister, der eine mag es, der andere nicht.kartmanne hat geschrieben:Aus Schleifen per break rausspringen... sowas mag ich nicht. Ich mag auch das basic-typische Goto nicht (benutze es nur, um bei der Fehlersuche zeitweise große code-Blöcke inaktiv zu setzten).
Goto ist da eher relativ großflächig verhasst

Das schöne ist, dass jeder machen kann, was er will.
Ganz einfach, schau Dir das hier an:kartmanne hat geschrieben:Aber... ich hab immer noch nicht erkannt, warum mein code das Verhalten des Testfensters provoziert...
Code: Alles auswählen
Case Window_e_0 ;einstellungendialog
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case Button_e_0 ;ende
ende_e=1
EndSelect
Case #PB_Event_CloseWindow
ende_e=1
EndSelect
If ende_e =1 ; einstellungen beenden
CloseWindow(Window_e_0)
EndIf
Du hast Dein Fenster Window_t_0 eben durch den Klick auf den Button geöffnet.
Es werden verschiedene Events für dieses Fenster erzeugt.
Da nun Window_e_0 = Window_t_0 wird in obigen Code eingesprungen, was natürlich nicht beabsichtigt ist.
Dann hast Du leider die Überprüfung, ob das Fenster geschlossen wird, ausserhalb der Eventüberprüfung eingebaut.
D.h. egal welcher Event kommt (und ein neu erstelltes Fenster erstellt so einige Events, die dich eigentlich hier gar nicht interessieren) dieser Teil wird immer angesprungen:
Code: Alles auswählen
If ende_e =1 ; einstellungen beenden
CloseWindow(Window_e_0)
EndIf
Eine oft genutzte Methode ist übrigens, alle Fenster gleich zu erstellen und bei bedarf nur an und auszuknipsen (also HideWindow()).
Dann hast Du die meisten Probleme, die bei dynamisch erstellten Gadgets entstehen können elegant umschifft und ein User sieht keinen Unterschied.