Mehrfachauswahl mit Bedingungen in der Programmierung

Freitag 17 Mai 2013 um 15:57

Wenn man einen grafischen Dialog (Gui) programmiert und dann die Bedinungen unterschiedlicher Schalterkonstellationen abfragen muss, bietet sich manchmal ein guter Programmiertrick aus alten Tagen an.

Wenn man mehr als 4 oder 5 Schalterzustände in unterschiedlichen Konstellationen abfragen muss wird ein Schleifenkonstrukt aus geschachtelten If-Then-Else - Schleifen sehr schnell sehr unübersichtlich.

Selbst wenn es bei der ersten Erstellung noch ganz gut klappt, nichts ist in der Programmierung so sicher wie die Veränderung! Und wenn dann plötzlich auf eine zuvor nicht berücksichtigte Konstellation geprüft werden muss endet die erste Überarbeitung im Chaos.

Eine einfache Möglichkeit so etwas zu umgehen ist, die Auswahlwerte mit einfachen Integer-Zahlenwerten zu belegen und diese zu addieren. Jeweils abhängig vom Ergebnis erfolgt die Auswahl. Ein Beispiel:

Wir haben eine Gui mit drei Radio-Buttons in einer Button-Group (d.h. nur einer der Radio-Buttons kann ausgewählt werden). Dazu haben ich drei Checkboxen. Die Checkbox kann jeweils angehakt oder nicht angehakt sein. Rein rechnerisch habe ich jetzt acht Möglichkeiten pro ausgewählten Radio-Button. Bei drei Radio-Buttons macht dies bereits 32 Schalterzustände, auf die ich ggf. reagieren muss. Mit If-Then-Else ein nettes Unterfangen ;-) Hier kommt eine Lösung:

Wenn man den Schalterzustand eines Elements mit einem Integerwert belegt, kann man über die Summe der Einzelwerte auf den jeweiligen Schalterzustand schließen.

In Bezug auf o.g. Beispiel wird der erste Radio-Button, wenn selektiert mit dem Wert 2 belegt, ansonsten 0. Der zweite Radiobutton erhält die 4 und der dritte Button die 8.

Die Checkboxen erhalten, wenn angehakt, jeweilis die 16, 32 und 64. Wenn sie nicht angehakt sind jeweils eine 0.

Will ich nun den Schalterzustand abfrage, bei dem der zweite Radiobutton selektiert ist, und die erste und letzte Checkbox angehakt, ergibt sich rechnerisch der Wert von 4 (zweiter Radiobutton) + 16 (erste Checkbox) + 64 (letzte Checkbox). Richtig, das macht 84. In einer Switch-Case-Schleife brauche ich jetzt nur die 84 als Case eintragen, und kann so alle Schalterkombinationen abfragen, und die jeweiligen dahinter ablaufenden Dinge programmieren.

Durch die Doppelung des vorherigen Wertes wird erreicht, dass keine Schalterkombination einen gleichen Zahlenwert ergibt.

Insbesondere, wenn im Verlauf der Programmierung weitere Schalter dazu kommen ist das Erweitern sehr einfach, ohne dass man sich in eine besondere Schalterlogik wieder hineindenken muss. Man muss nur den neuen Zahlenwert abfragen, der sich durch die Addition ergibt.

Best Regards ;-)

Kein Kommentar

Schreibe einen Kommentar

required
Hier Klicken zum Verändern

Auf dieser Seite werden die Kommentare moderiert.
Das bedeutet, dass die Kommentare erst dann veröffentlicht werden, wenn sie freigeschaltet wurden.

Persönliche Informationen speichern?
Hinweis: Alle HTML-Tags außer <b> und <i> werden aus Deinem Kommentar entfernt. URLs oder Mailadressen werden automatisch umgewandelt.