![]() |
Combobox mit Objekten
Hallo zusammen,
ich möchte eine Ländertabelle in eine Combobox eintragen und später nach einem Eintrag suchen. Die Ländertabelle besteht aus dem Namen und der Abkürzung des Landes, also z.B.: Deutschland - DEU Italien - ITA Frankreich - FRA Der Eintrag in die ComboBox erfolgt so:
Delphi-Quellcode:
In der Combobox wird auch nur der Names des Landes angezeigt.
ComboBox.Items.Clear;
Table.First; while (not Table.EOF) do begin Combobox.Items.AddObject (Table.FieldByName('Landname').AsString, TObject(Table.FieldByName('LandKurz').AsString)); Table.Next; end; Wenn ich jetzt einen Listeneintrag auswähle, möchte ich gern die Abkürzung des Landes ermitteln.
Delphi-Quellcode:
Das funktioniert aber nicht.
LandKurz := String (ComboBox.Items.Objects[ComboBox.ItemIndex]);
Auch die Positionierung auf ein Land über die Abkürzung klappt nicht:
Delphi-Quellcode:
Kann mir jemand auf die Sprünge helfen ?
sLand := 'DEU';
ComboBox.ItemIndex := ComboBox.Items.IndexOfObject (TObject (sLand)); Mike |
Re: Combobox mit Objekten
Kommt ein Fehler?
|
Re: Combobox mit Objekten
Nein, es kommt kein Fehler.
Bei
Delphi-Quellcode:
kam z.B. ein Textfragment "age", wenn ich Deutschland selektiere.
LandKurz := String (ComboBox.Items.Objects[ComboBox.ItemIndex]);
Und bei
Delphi-Quellcode:
ist das Ergebnis -1.
sLand := 'DEU';
ComboBox.ItemIndex := ComboBox.Items.IndexOfObject (TObject (sLand)); Und ich weiß nicht warum. |
Re: Combobox mit Objekten
Was soll dabei rauskommen wenn Du einen String in ein TObject umwandelst? So gehts from Prinzip her:
Delphi-Quellcode:
StrDispose(PChar(sl.Objects[0]));
var
s : Pointer; sl : TStringList; begin sl := TStringList.Create; s := StrNew(PChar('Hallo')); sl.AddObject('Eins', s); ShowMessage(PChar(sl.Objects[0])); // --> 'Hallo' |
Re: Combobox mit Objekten
.Objects verwaltet nur Zeiger. Du musst die eigentlich Objekte selber verwalten. Das Objekt, welches du adressierst besteht dann ja nicht mehr, bzw. hat dann einen anderen Inhalt.
|
Re: Combobox mit Objekten
Hi!
Kann es sein, dass die Objekte in der Combo leer sind? Ich habe gerade versucht den Quelltext auf meiner Maschine laufen zu lassen, nur mit festen Strings statt Strings aus einer Datenbanktabelle. Das Ergebnis war eine Fehlermeldung vom Compiler, dass dieses Typecasting (auf TObject) nicht funktioniert. Wenn ich nil-Werte auf TObject gecastet habe, läuft zumindest das Füllen der Combo, allerdings sind die Objekte dann leer. Das Casten eines String auf ein TObject erinnert an das Boxing unter .NET, Du schriebst aber in der Überschrift etwas von Win32. Wenn ich Objekte an eine TStringList oder eine TComboBox anhänge, schreibe ich mir dazu eine Mini-Klasse, die die erforderlichen Felder beinhaltet. Ist sicher für ein Feld erst einmal ein ziemlicher Aufwand, geht aber aus meiner Sicht nicht anders. Gruß Peter |
Re: Combobox mit Objekten
Zitat:
|
Re: Combobox mit Objekten
Hallo Union!
Deine Lösung habe ich erst nach dem Posten gesehen, für den String ist das natürlich eleganter. Mit einer Klasse hat man die Möglichkeit zusätzliche Infos mit im Objekt unterzubringen. Peter |
Re: Combobox mit Objekten
@peterlepan:
Zitat:
Die kleine Miniklasse wollte ich mir eben ersparen. Wenn es keine andere Lösung gibt, werde ich es so machen. Aber vielleicht gibt es ja doch noch eine Lösung. |
Re: Combobox mit Objekten
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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 by Thomas Breitkreuz