Array Index herausbekommen bei dynamic_cast<TPanel*>(Sender)
-
Es soll ne Umfrage werden:
Bild > http://ichigo01.free.fr/887ufqun.jpgDie Buttons wechseln die Farbe beim anklicken. Weil immer nur einer Markiert seien soll, muss ich den Array bekommen.
gruß
-
Für eine Umfrage eignen sich Radiogroups IMHO besser als dein Panels-Array. Da brauchst du auch nichts markieren. Kannst alles über den OI einstellen.

-
dynamic cast hat den Vorteil, dass man einen NULL-Zeiger zurückbekommt, wenn nicht gecastet werden kann. Also prüf das Ergebnis des cast, bevor Du den Zeiger verwendest.
Ansonsten bin ich geneigt PuppetMaster2k zuzustimmen.
-
Danke für die Hilfe, habs nun mit Brute Force gemacht! gruß
-
Hi FB1,
du könntest in der For schleife, in der du die Click Methode zuweist
auch gleich dem Tag der Panels einen Wert zuweisen. Über den könntest du dann
schneller das Panel herausfinden:for (int x(0);x<100;++x) { for (int y(0);y<5;++y) { Panel[x][y]->OnClick = MyClick; Panel[x][y]->Tag = x+100*y; } } void __fastcall TForm1::MyClick(TObject *Sender) { TPanel *p(dynamic_cast<TPanel*>(Sender)); if (p) { p->Color=clBlue; int x(p->Tag%100); int y(p->Tag/100); } }Wenn ich jetzt nicht % und / vertauscht habe sollte es passen, oder?
ciao,
k
-
Er braucht es wohl anders herum.
Panel[x][y]->Tag = (x * 5) + y; int x(p->Tag / 5); int y(p->Tag % 5);Dennoch finde ich díese Vorgehensweise nicht besonders glücklich. Was macht er wenn es mal mehr Fragen werden, oder wenn es mehr Auswahlmöglichkeiten geben soll. Oder gar so gemeine Dinge, wie nur bei einer Frage mehr Auswahlmöglichkeiten...
Mit dem jetzigen Design ist er da ziemlich festgelegt. Er müßte den kompletten Code überarbeiten. Wenn er die Daten vom UI entkoppelt, muß er nur die Eingangsdatei (die mit den Fragen und Auswahlmöglichkeiten) ändern und keine einzige Codezeile ändern.
-
joe_m du berechnest genau das gleiche nur in
grün....das funzt beides
und deine kritik ist mir nicht ganz klar.
meinst du sein design oder die tag sache?
-
Die Tag Sache ist schon in Ordnung.
Mir gefällt nur die Idee nicht, dass für 100 Fragen, 100 Sätze Panels erzeugt werden. Also praktisch alles 1:1 abgebildet ist.
-
Hi Danke für die vielen Antworten,
was ist denn das für ein C++ Stil:
int x(p->Tag / 5);
So kenn ich ja die Zuweisung gar nicht
Oder ist das nur pseudo-code?gruß
-
Nein, dass ist keine Pseudocode. Probier es aus.
Allerdings hast Du recht, man sieht selten, dass der Konstruktur für Basistypen verwendet wird. Nichtsdestotrotz gibt es ihn und man kann ihn verwenden.