Folgende Vorgabe:
Ich habe eine Combobox. Je nachdem welcher Wert in dieser CB ausgewählt wird, wird eine zweite CB mit Daten gefüllt. Aus dieser wird wieder ein Eintrag ausgewählt. Je nach Wert wird eine dritte CB gefüllt und ggf. 3 weitere Edits eingeblendet. Diese Edits dürfen nur mit Zahlen gefüllt werden, di, je nachdem welcher Eintrag in der CB ausgewählt wurde, einen bestimmten Werteberreich nicht überschreiten darf.
Das ist jetzt eine recht simple Vorgabe. Aber wo, wenn nicht innerhalb der Form soll diese Logik untergebracht werden. Ich lerne immer wieder gerne dazu. Erkläre es mir.
Du hast das schon richtig gelöst. Man muss hier zwischen Anwendungslogik, die tunlichst von der Eingabe getrennt werden sollte, und Eingabelogik unterscheiden. Die Datenklasse ist für die Anwendungslogik zuständig und wird (zumindest bei mir) nicht mit Plausibilitätsprüfungen der Eingaben oder Eingabehilfen (z.B. Füllen von Comboboxen) belastet. Manchmal habe ich für die Eingabelogik eine separate Klasse, aber oft lohnt der Aufwand nicht und dann löse ich das eher pragmatisch als dogmatisch. In die Eingabelogik gehört zum Beispiel auch das dynamische Füllen der Hints oder das Sperren bzw. Freigeben einzelner Controls abhängig vom Kontext und vorherigen Eingaben. Diese Sachen macht man meistens besser im Form.
Das Schlimmste, was ich mal gesehen habe, waren Form- bzw. Control-Events, die in den Datenklassen implementiert und zur Laufzeit verdrahtet wurden. Wenn dort dann so Sachen wie CheckBoxClick oder EditChange auftauchen, läuft etwas so richtig verkehrt.