AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ComboBox mit Integer-IDs

Ein Thema von e-gon · begonnen am 9. Sep 2022 · letzter Beitrag vom 5. Apr 2024
 
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
156 Beiträge
 
Delphi 6 Enterprise
 
#1

ComboBox mit Integer-IDs

  Alt 9. Sep 2022, 12:30
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
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz