Bestimmtes Edit feld auswählen
-
ungefähr so:
for(int i=0; i < Form1->ComponentCount; i++) { if (Form1->Components[i]->ClassNameIs("TEdit")) { if(dynamic_cast<TEdit*>(Form1->Components[i])->Name == "Edit"+Edit1->Text) { dynamic_cast<TEdit*>(Form1->Components[i])->Visible = true; } } }
-
-
Christian211 schrieb:
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_17.html
was ihm aber nicht gerade viel bringen wird..
da er einen Pointer auf das Edit bräuchte, was er aber nicht hat. da er ja im OnClick-Event des Buttons auf ein Edit zugreifen will.
und wenn man schon dynamic_cast benutzt sollte man auch den grossen vorteil von dynamic_cast ausnutzen und eine null abfrage machen.BigNeal
-
da er einen Pointer auf das Edit bräuchte, was er aber nicht hat. da er ja im OnClick-Event des Buttons auf ein Edit zugreifen will.
Richtig, habe ich nicht gesehen
-
Christian211 schrieb:
da er einen Pointer auf das Edit bräuchte, was er aber nicht hat. da er ja im OnClick-Event des Buttons auf ein Edit zugreifen will.
Richtig, habe ich nicht gesehen
genausowenig habt ihr wohl die Lösung gesehen ....

-
loos schrieb:
genausowenig habt ihr wohl die Lösung gesehen ....

du meinst die lösung die du gepostet hast?
vor der würde ich auf jeden fall abraten. sie ist sehr resourcenfeindlich und unflexibel.
da würde ich eher ein Array empfehlen.mfg
BigNeal
-
BigNeal schrieb:
sie ist sehr resourcenfeindlich und unflexibel.
da würde ich eher ein Array empfehlen.Selten so gelacht.

Absolut nicht resourcenfeindlich und unflexibel.
Eher wohl die optimale Lösung.
Dann nimm doch ein Array und du wirst sehen wie unflexibel das ist.
Edit:
Zitate bitte auf das Notwendigste beschränken. Danke!
-
loos schrieb:
Selten so gelacht.

gut, lachen ist gesund
loos schrieb:
Absolut nicht resourcenfeindlich und unflexibel.
Eher wohl die optimale Lösung.
Dann nimm doch ein Array und du wirst sehen wie unflexibel das ist.ok, mal vergleichen:
int Index = StrToIntDef(Edit->Text,-1); if(Index!=-1) EditArray[Index]->Visible = true;for(int i=0; i < Form1->ComponentCount; i++) { if (Form1->Components[i]->ClassNameIs("TEdit")) { if(dynamic_cast<TEdit*>(Form1->Components[i])->Name == "Edit"+Edit1->Text) { dynamic_cast<TEdit*>(Form1->Components[i])->Visible = true; } } }hmmm.. was denkst du ist weniger CPU-lastig? direkt die Komponente ansprechen oder alle Komponenten auf der Form durchlaufen und immer schön casten?
was machst du wenn du plötzlich eine Komponete auf der Form hast, die nur von TEdit abgeleitet ist?BigNeal
-
Schon ein bissssschen "geschummelt", da der Code um das Array zu erstellen fehlt. Unabhängig von der CPU-Last, die beim Array wohl in jedem Fall günstiger ist.
Wobei sich noch die Frage stellt einmalig durchnuddeln ok, aber wenn die funktion öfter kommt, ist das ein weiterer Grund für ein Array
-
Da stimme ich dir voll zu BigNeal.
Mal abgesehen davon, kann man loos Code ein wenig vereinfachen.for(int i=0; i < Form1->ComponentCount; i++) { TEdit *edit = dynamic_cast<TEdit*>(Form1->Components[i]); if( edit != 0 && edit->Name == "Edit"+Edit1->Text) edit->Visible = true; }Die Array-Lösung ist aber trotzdem besser.
-
Bei einer Anzahl von 1000 Edits auf dem Formular magst du vielleicht recht haben.

Obwohl du da dann auch erstmal dein Array füllen must.
Unflexibel ist deine Lösung aber wohl eher, wenn die Anzahl der TEdits flexibel ist.
-
Wenn die TEdits zur Laufzeit erstellt werden, muß man das Array halt anpassen.
-
Braunstein schrieb:
Wenn die TEdits zur Laufzeit erstellt werden, muß man das Array halt anpassen.
Was ist umständlicher ?
-
loos schrieb:
Bei einer Anzahl von 1000 Edits auf dem Formular magst du vielleicht recht haben.

Obwohl du da dann auch erstmal dein Array füllen must.1000 edits erzeugst du sowieso dynamisch, oder willst du die einzeln auf das formular klicken?

loos schrieb:
Unflexibel ist deine Lösung aber wohl eher, wenn die Anzahl der TEdits flexibel ist.

-> DynamicArray
mfg
BigNeal
-
BigNeal schrieb:
-> DynamicArray
dann aber lieber std::vector
-
loos schrieb:
Was ist umständlicher ?
Was soll daran umständlich sein beim Hinzufügen oder Löschen eines Edits das Array anzupassen? Das kann man auch schön in einer Funktion kapseln.
-
Braunstein schrieb:
BigNeal schrieb:
-> DynamicArray
dann aber lieber std::vector
std::vector ist zwar besser aber trotzdem noch viel zu umständlich.
Bei einer mal geschätzten Anzahl von vielleicht höchstens 20 Edits ist dieser Aufwand mit normaler Logik nicht mehr zu vertreten.
-
Braunstein schrieb:
loos schrieb:
Was ist umständlicher ?
Was soll daran umständlich sein beim Hinzufügen oder Löschen eines Edits das Array anzupassen? Das kann man auch schön in einer Funktion kapseln.
Das ist ein Aufwand. Mit Kanonen auf ...

-
Hallo
@ loos : Nicht wenn man mal an das Laufzeitverhalten denkt. In einem Array wird gezielt zugegriffen. Bei deiner Variante werden jedesmal alle Komponenten bis zum gefundenen durchlaufen. Stell dir das mal bei ein paar Aufrufen pro Sekunde und 200 Komponenten vor.
Was ist also dagegen einzuwenden, gleich Laufzeit-Optimiert zu schreiben? Oder gehörtst du auch zu den Leuten, die nur bei den Quellcode-Zeilen optimieren wollen?bis bald
akari
-
Zumal die Array Variante auch vom Quellcode her nicht viel größer sein sollte. Ich denke mit 2 Zeilen mehr ist man dabei. Man könnte auch eine std::map nehmen, da wird die Verwaltung und der Zugriff noch einfacher.