Indizierte oder Array-Komponenten
-
Erstmal sorry, falls das schon 10mal gefragt wurde, aber die suche spuckt bei mir immer nur kein Ergebnis aus, egal wonach ich suchen lasse.
Also ich hab bisher mit Visual Basic gearbeitet, und dort gab es so ne wundervolle Eigenschaft, das man jede Komponente mit anderen zu einem Array zusammenfügen konnte. So sparte man sich nen Haufen Arbeit, weil man nicht für jede gleichartige Komponente Ereignisbehandlungsroutinen neu schreiben musste.
Dazu hatte jede Komponente eine "Index"-Eigenschaft.
Gibt es sowas auch in CBuilder?
-
Nein, aber du kannst die Komponenten als Array erstellen.
Siehe FAQ unter "Komponenten benutzen - zur Laufzeit erstellen ...".Und ansonsten kannst du natürlich auch alle (gleichartigen) Komponenten per ObjectInspector dieselbe Ereignisbehandlungsroutine benutzen lassen, wobei die jeweils aktuelle Komponente dann über den Sender-Parameter identifiziert wird. Dazu gibt es ebenfalls einen FAQ-Beitrag.
-
Danke erstmal.
Dynamisch erstellen wollt ich die Komponenten eigentlich nicht, weil ich da ja zur Entwicklungszeit noch nicht sehe, wie die Form den nun letztendlich aussieht. Wahrscheinlich werd ich es wohl so machen, das ich mir ein Pointerarray anlege, und zum Programmstart die zugehörigen Komponenten dort dann eintrage. Alles in allem aber ne sehr umständliche Lösung, das haben die Leute bei Microsoft ausnahmsweise besser hinbekommen.
-
Ich bin mir nicht sicher, ob du meinen zweiten Hinweis auch richtig verstanden hast.
Bei zB. 50 Buttons reicht es, nur für den ersten eine OnClick-Prozedur zu erzeugen. Die restlichen Buttons können dann alle dieselbe Prozedur benutzen, wobei du den Sender auswertest und z.B. über ein switch/case auf jeden Button spezifisch reagierst.
-
Doch, das mit einer Prozedur für mehrere Komponenten hab ich verstanden, und das klappt auch mitlerweile. Idendifizieren tue ich die Komponenten über die Tag-Eigenschaft.
Weswegen ich die Komponenten in Array-Form brauche liegt daran, das z.B. eine Aktion in Combobox[2] sich nur auf TextEdit[2] auswirken soll. Ich möchte eben nicht einen code haben, der in der gemeinsamen Prozedur so aussieht:case 1: TextEdit1.text = "Irgendwas"; case 2: TextEdit2.text = "Irgendwas";
Das sollte eher so aussehen:
TextEdit[tag].text = "Irgendwas";
-
-junix
-
caste doch den sender in ein TEdit und greif direkt drauf zu.
static_cast<TEdit*>(Sender)->Text = "Bla";
-
Jester2000 schrieb:
caste doch den sender in ein TEdit und greif direkt drauf zu.
Äh ich glaube nicht, dass das zum Ziel führt, Jester (o;
Denk die Idee nochmals ganz durch. Ausserdem würde ich dir raten, mal genauer darüber nachzudenken ob wohl nicht dynamic_cast statt static_cast besser wäre...-junix
-
hmm, ich finde das führt serwohl zum ziel (jedenfalls was dass problem in seinem letzten post angeht)
mit dynamic_cast magst du recht haben (hab ich erlichgesagt noch nie verwendet. hatte bisher immer static_cast genommen, aber als ich mir gerade die hilfe dazu durchgelesen hab, bin ich hinter den unterschied gestiegen. tja, wieder was gelernt)
-
Jester2000 schrieb:
hmm, ich finde das führt serwohl zum ziel (jedenfalls was dass problem in seinem letzten post angeht)
Würdest du mich bitte an ein paar Details deiner Überlegungen ergötzen? Irgendwie seh ich das nicht ganz. Der Sender wird die ComboBox sein. Was bringts mir jetzt, die den Zeiger auf die ComboBox nach TEdit zu casten? (abgesehen von der Zugriffsverletzung)
-junix
-
ups *duck*, ich hätte wohl heute früh nicht so zeitig aufstehen sollen
hab dass mit der combobox wohl geschickt überlesen.
naja, zum glück gibts gleich mittag. hoffentlich bin ich danach wieder fiter (hmm, schreibt man das so)