![]() |
Nächste Komponente in Array von Record finden
Hallo,
um eine größere Anzahl von Controls zu verwalten, hab ich ein Array von einem Record, sinngemäß:
Delphi-Quellcode:
Die Controls werden dann mehrfach erzeugt und sind über das Array verfügbar.
TMyControl
Position: TEdit; Value: TEdit; Measured : TCheckbox; ValueUnit : TCombobox; TMyControlArray: array[0..max] of TMyControl; Um zwischen den Feldern leichter wechseln zu können, soll der Fokus über das OnKeyDown-Event weiterbewegt werden. Ins nächste kann ich via TabOrder kommen. Das ist dann zB von "Position" zu "Value".
Delphi-Quellcode:
Aber wie komm ich von
if (Key=VK_Left) then
self.SelectNext(Sender as TWinControl, false, true); if (Key=VK_Right) then self.SelectNext(Sender as TWinControl, true, true); MyControlArray[1].Position nach MyControlArray[2].Position oder von MyControlArray[32].Value nach MyControlArray[33].Value also vertikal rauf oder runter? Als Komplikation: es gibt nicht nur die eine TMyControl und TMyControlArray sondern mehrere:
Delphi-Quellcode:
Für alle sollte idealerweise dieses Event funktionieren.
TMyOtherControl
A: TEdit; B: TEdit; C: TEdit; D: TCombobox; E: TCombobox TMyOtherControlArray: array[0..max] of TMyOtherControl; Mir fällt nix Kluges ein. Ich kann natürlich den Sendernamen (oder den Namen des aktuellen Focus-Controls) abholen und über den Namens-string und Findcomponent wieder zu einem neuen Control-Namen finden. Da wär lösbar, weil alle Komponenten durchnummeriert sind. Aber mäh, jetzt sind doch die Objekte in einer List, um FindComponent zu vermeiden. Ich müsste vom sendenden Control auf das beinhaltende Array kommen und dann auch noch auf das Control des Records. Keine Idee dazu. danke für jeden Hinweis! |
AW: Nächste Komponente in Array von Record finden
Ich nehme an, die Elemente in den Records sind Zeiger auf die "echten" Steuerelemente im Formular oder im Frame? Dann einfach per
MyControlArray[32].Value.SetFocus wechseln ("SelectNext" macht intern auch nichts anderes). |
AW: Nächste Komponente in Array von Record finden
Zitat:
|
AW: Nächste Komponente in Array von Record finden
Da musst du das Array durchgehen und suchen oder schlicht eine TList<T> verwenden, die das Array kapselt, denn die hat ein IndexOf (macht dort aber auch nix anderes).
|
AW: Nächste Komponente in Array von Record finden
Halo,
du hast doch Handle des Fensters? Damit solltest Du dein aktuelles Control im Array doch finden müssen? |
AW: Nächste Komponente in Array von Record finden
Alternativ könntest du auch die Tags der Controls "missbrauchen:
MyControlArray[1].Position.Tag := 1; MyControlArray[1].Value.Tag:= 1; .... MyControlArray[2].Position.Tag := 2; MyOtherControlArray[1].A.Tag := 10000+1; .... MyOtherControlArray[2].A.Tag := 10000+2; Dann kommst du über das Tag auf den Index, bzw zusätzlich auf das entsprechende Array... Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz