ComboBox Item löschen

Rund um die LCL und andere Komponenten
Antworten
Reinhard
Beiträge: 46
Registriert: Fr 26. Sep 2008, 16:56

ComboBox Item löschen

Beitrag von Reinhard »

Wie kann ich ein Item aus einer ComboBox löschen wenn der Style auf DropDown ist - also die ComboBox ausgeklappt ist ?

Ich meine jetzt nicht "Combobox1.items.delete(x)" das ist schon klar, ich will den Wert von "X" ermitteln.

Z.b,

Wenn man die ENTF Taste drückt während das Drop Down Menü sichtbar ist , und einen Eintrag markiert.

Das Problem ist , das kein Event ausgelöst wird wenn ich einen DropDown Eintrag mittels der Tastatur auswähle.

Weder ein "onSelect" noch ein "onChange" wird ausgelöst, ledeglich auf das "onKeyDown" wird reagiert.

Damit ich die "Delete" eigenschaft von combobox.items aufrufen kann, brauch ich aber einen ItemIndex.

Der ItemIndex ändert sich aber nur dann, wenn ein zuvor aus der Drop Down Liste ausgewählter Eintrag im Edit Feld der ComboBox steht, da ist aber das DropDown Menü schon wieder weg,

Ich will erreichen das ich den in der DropDown Liste ausgewählten Eintrag löschen kann während die ComboBox aufgekalppt ist, nicht erst wenn der Eintrag im EditFeld der ComboBox steht.

Kann mir ja jemand weiterhelfen ?

Danke

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ComboBox Item löschen

Beitrag von Michl »

Darf man fragen wozu das Ganze?

Willst du sowas machen, wie in der Google Search Bar (mit eingeben von Zeichen die Items selektieren)? Für sowas hatte ich mal einen Inplaceeditor geschrieben, der in einigen Anwenungen von mir läuft. Falls dich dieser interessiert, müsste ich mal schauen, ob ich diesen rauslösen kann.

Falls du aber wirklich Items bei einer ausgeklappten Combobox löschen willst, müsstest du dir vermutlich eine eigene Komponente bauen. Evtl. kannst du von der Combobox ableiten und die Tasten entprechend behandeln. Alternativ könntest du dir eine aus einem Edit und einer ListBox oder so bauen.

Evtl. reicht dir auch sowas (funktioniert hier zwar, ist aber nicht so, wie ich das jemanden zumuten würde):

Code: Alles auswählen

  TForm1 = class(TForm)
...
  private
    ComboboxItems: TStringList;
 
...
 
procedure TForm1.ComboBox1KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_DELETE:
      ComboBox1.Items.Delete(ComboBox1.ItemIndex);
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboboxItems := TStringList.Create;
  ComboboxItems.Text := Combobox1.Items.Text;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ComboboxItems.Free;
end;
 
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
  Combobox1.Items.Text := ComboboxItems.Text;
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten