So erstellen Sie eine combobox mit zwei Spalten (eine versteckt) in Delphi 7?
Erstellen einer TComboBox mit zwei Spalten, die eine der Spalten ausgeblendet, so dass Sie halten können einen id-Wert zusammen mit der tatsächlichen Position in der it? Und dann, wie man, dass der id-Wert programmgesteuert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Notwendigkeit für zwei Spalten hier.
Können Sie die Tatsache nutzen, dass
TComboBox.Items
(wie viele andere Dinge in Delphi, wieTStringList
,TMemo.Lines
, undTListBox.Items
) stammt ausTStrings
, die beide dieStrings
undObjects
Eigenschaften.Objects
speichert alles, was der Größe einesTObject
, die einen Zeiger.Bedeutet dies, dass Sie können speichern Sie Ihre integer-Wert einfach durch typecasting es zu einer TObject, wenn Sie es, und typecasting zurück zu einer Integer beim abrufen es.
Etwas wie dies funktionieren sollte:
Um den Wert abzurufen:
Beachten, dass seit dem Objekte Eigenschaft ist eigentlich gedacht, um zu speichern Objekte, dies gibt Ihnen eine Menge Flexibilität. Hier ist ein Beispiel (absichtlich ganz triviale) zum speichern eines Kunden-Kontakt-Informationen an einem assoziierten Objekt-Instanz und zeigt die Etiketten, wenn ein Element aus einer listbox ausgewählt ist.
ComboBox-Steuerelemente unterstützen keine Spalten, und Sie müssen nicht eine verborgene Spalte sowieso das zu erreichen, was Sie brauchen.
Den
TComboBox.Items
Eigenschaft ist einTStrings
Nachkomme. Es kann halten Sie die beiden string-Werte und zugehörige Benutzer-definierte Daten und Werte zusammen in der gleichen Zeit, aber die user sehen nur die string-Werte in der Benutzeroberfläche. Verwenden Sie dieItems.AddObject()
Methode zum string hinzufügen+ID-Werte in die Liste, und verwenden Sie dann dieItems.Objects[]
- Eigenschaft zum abrufen der ID-Werte, wenn nötig.Alternativ können Sie nur speichern Sie Ihre ID-Werte in einem separaten array, dass die gleiche Anzahl Elemente wie die ComboBox und dann verwenden Sie das ComboBox-Element-Indizes, um den Zugriff auf die array-Werte. Dies ist besonders wichtig, wenn Sie brauchen, um zu speichern, ein Wert von -1, da dieser bestimmte Wert ist nicht abrufbar, von der
Objects[]
Eigenschaft einesTComboBox
aufgrund der Art, wie die getter-Methode implementiert ist, wie Rob sagte.TObject(-1)
in einer combo-box. Sie können es speichern, aber Sie können es nicht zurückbekommen danach. Das ist der Wert, den OS gibt als Fehler aus, wenn es nicht abgerufen werden kann, einen Wert aus einer combo-box, so dass Sie das VCL-Steuerelement übersetzt es in eine Ausnahme, wenn Sie es Lesen.