Wer hat am Control gedreht?

Hallo Zusammen,

ich hätte mal eine ganz einfache, grundlegende Frage:

Um zu unterscheiden, ob die Änderung eines Controls durch den Anwender oder den Code erfolgte, nutze ich eine globale Boolean namens “own”.

Die Change-Events der Controls beginnen also oft mit dieser Zeile…

if own then return

Das funktioniert gut, ist aber ausgedacht. Wie würde man es richtig machen?

Einen Hack diesen Typs benutze ich auch nur das mein “own” “suppressChangeHandler” heisst. Dann mache ich mir Subklassen der Standardcontrols und mache dann da eine Methode (z.B. für Textfelder)
setValue(Value as String)
suppressChangeHandler=true
me.Text=Value
suppressChangeHandler=false
und im change event checke ich dann die Variable so wie Du. Glaube nicht dass es da etwas wesentlich raffinierteres gibt.

Besten Dank, du machst es ja (fast) genauso.

Da dieser Umstand systemimmantent ist, war ich mir sicher, dass es auch einen offiziellen Weg oder eine vorgegebene “richtige” Handlungsweise dafür gibt (die ich nur nicht kenne).

Ein so tief struktureller Umstand muss tatsächlich so oder ähnlich gelöst werden? Da gibt es von Apple keine Empfehlung oder Vorgabe?

Das finde ich sehr erstaunlich.

Nunja, ich wäre da nicht so kritisch, Xojo stellt uns die Mittel zur Verfügung Probleme dieser Art zu lösen, mit ein bisschen Erfindungsgeist kann man damit sehr produktiv sein.

Mein Ansatz bei der Thematik ist eher fensterbezogen, sprich: jedes Fenster hat ein Property “mLoading” vom Typ Boolean. In den Change Events der Controls in einem Fenster wird dann der Inhlat von mLoading abgefragt und entsprechend reagiert.

Sobald ich also etwas mache, was normalerweise den Change Event auslösen würde (und ich das nicht möchte) wird vorher mLoading auf True gesetzt und danach dann wieder auf False…

In den Change Events steht dann ganz oben ein simples

If mLoading Then Return

So brauche ich keine Subklassen und habe eine relativ feine Steuerungsmöglichkeit…

Wenn das eine Kritik wäre, dann ginge sie an Apple, denn dieser Mechanismus gehört zum macOS.

Aber gut, wenn das so ist, und wir letztlich alle auf die gleiche oder ähnliche Lösung kommen, dann kann das ja nicht schlecht sein :slight_smile:

Ohne Subklassen musst Du dann ja bei jeder Instanz auf Deinem Fenster den change event ändern, oder? Da kann man schnell mal eine übersehen.

Das hat vermutlich etwas mit persönlichen Vorlieben/Arbeitsweisen zu tun.
Da ich Controls fast immer kopiere/dupliziere ist das der für mich schnellere Weg. Subklassen zu kopieren vergesse ich gerne mal, wenn es zwischen verschiedenen Projekten hin- und hergeht - das Ergebnis sind dann nutzlose Controls ohne SuperClass…