Wie kann ich auf ein Steuerelement verweisen, dessen Name zur Laufzeit bestimmt wird?

8

Als eine Art Übung zum Selbststudium habe ich eine Form erstellt, die sechs Felder in einem 2x3-Rechteck enthält, und ich möchte, dass sie nacheinander zwischen sichtbar und unsichtbar wechseln. Ich versuche es, indem ich eine for-Schleife verwende. Ich könnte natürlich etwas schreiben wie:

%Vor%

Aber das erfordert ziemlich viel Tippen und ist ziemlich ineffizient, wenn ich mich entscheide, dass ich zwischen jedem Schritt 100ms warten soll. Zum Beispiel müsste ich dann alle sechs zu wartenden Schritte bearbeiten. Dies ist für sechs Schritte machbar, aber vielleicht möchte ich es ein anderes Mal hundert Mal tun! Ich denke also, es muss auch eine Möglichkeit geben, eine for-Schleife zu verwenden, bei der eine Variable von 1 bis 6 variiert und in der Objektkennung verwendet wird. So würde es in etwa so aussehen:

%Vor%

Nun, das funktioniert offensichtlich nicht, aber ich hoffe, dass jemand hier mir sagen kann, ob das tatsächlich möglich ist und wenn ja, wie. Vielleicht kann ich eine Zeichenfolge als Kennung verwenden? Meine Erklärung ist wahrscheinlich ziemlich schlecht, weil ich nicht alle technischen Begriffe kenne, aber ich hoffe, dass der Code etwas erklärt.

    
Jim Daniël Teunis 30.11.2012, 16:33
quelle

3 Antworten

14

Sie können das Components -Array des Bedienfelds des Bedieners durchlaufen.

%Vor%

Sie können auch die FindComponent -Methode verwenden, wenn Sie einen sehr spezifischen Komponententyp nach Name möchten. Zum Beispiel, wenn Sie die 6 Panels haben, und ihre Namen sind Panel1 , Panel2 und so weiter:

%Vor%     
Ken White 30.11.2012, 16:39
quelle
6

Dies ist eine Situation, in der Sie die Steuerelemente dynamisch zur Laufzeit und nicht zur Entwurfszeit erstellen möchten. Der Versuch, sich mit 6 verschiedenen Variablen auseinanderzusetzen, wird nur eine Welt der Schmerzen sein. Und wenn Sie ein Raster von 3x4 statt 2x3 benötigen, werden Sie diese Entscheidung noch mehr bereuen.

Beginnen Sie also mit einem komplett leeren Formular. Und fügen Sie im Code ein zweidimensionales Array von Panels hinzu:

%Vor%

Dann können Sie im Konstruktor des Formulars oder in einem OnCreate -Ereignishandler das Array initialisieren, indem Sie eine Funktion wie folgt aufrufen:

%Vor%

Und jetzt können Sie sich auf Ihre Panels beziehen, die kartesische Koordinaten anstelle eines flachen eindimensionalen Arrays verwenden. Natürlich können Sie auch einfach ein flaches eindimensionales Array deklarieren, wenn Sie möchten.

Die Schlüsselidee ist, dass Sie beim Entwerfen einer großen Anzahl von Steuerelementen in einem strukturierten Layout den Designer am besten aufgeben und Code (Schleifen und Arrays) verwenden sollten.

    
David Heffernan 30.11.2012 16:54
quelle
4

Verwenden Sie FindComponent Methode von TComponent :

%Vor%     
Igor 30.11.2012 16:43
quelle

Tags und Links