Hallo zusammen,
ich arbeite gerne mit ComboBoxen. Allerdings stehe ich immer wieder vor dem Problem, dass ich nicht nur eine Sting-Liste benötige, sondern zusätzlich noch eine ID, die oft nicht mit ItemIndex übereinstimmt.
Wenn ich beispielsweise Daten sortiert aus einer Datenbank lese, wäre es oft praktisch mit dem Text auch gleich den Index des Datensatzes zu haben, statt diesen erst mit einer zusätzlichen Abfage über den Text zu ermitteln.
Deshalb schrieb ich diese eigene kleine Komponente:
Delphi-Quellcode:
unit BaBiCtrls2;
interface
uses
StdCtrls, Classes;
type
{ TIdComboBox }
TIdComboBox =
class(TComboBox)
private
FIds: TList;
procedure SetId(
Index,Id: Integer);
function GetId(
Index: Integer): Integer;
public
constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
procedure AddIdItem(
const s:
string;
const Id: Integer);
property Id[
Index: Integer]: Integer
read GetId
write SetId;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
BaBi', [TIdComboBox]);
end;
{ TIdComboBox }
constructor TIdComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FIds:= TList.Create;
end;
destructor TIdComboBox.Destroy;
begin
FIds.Free;
inherited;
end;
function TIdComboBox.GetID(
Index: Integer): Integer;
begin
if Index<FIds.Count
then
Result:= Integer(FIds[
Index])
else
Result:= 0;
end;
procedure TIdComboBox.SetId(
Index: Integer; Id: Integer);
begin
while Index>=FIds.Count
do FIds.Add(Pointer(0));
if Id <> GetId(
Index)
then
begin
FIds[
Index]:= Pointer(Id);
end;
end;
procedure TIdComboBox.AddIdItem(
const s:
string;
const Id: Integer);
var Index: Integer;
begin
Index:= Items.Count;
Items.AddObject(s,TObject(Self));
SetId(
Index,Id);
end;
end.
Generell tut sie, was ich will. Allerdings habe ich das Problem, wenn direkte Operationen über die String-Liste (ComboBox1.Items) durchgeführt werden. Add ist ja kein Problem, aber Insert, Delete, Sort,... - eben alles, was die Reihenfolge beeinflusst.
Kann mir jemand sagen, wie ich diese Operationen abfangen kann oder zumindest mitbekomme, dass sowas ausgeführt wurde?
Gruß
e-gon