Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Combobox Problem


Ziltoid - Sa 24.11.07 23:13
Titel: Combobox Problem
Ich habe ein Problem bei der unten stehenden Prozedur, diese soll sAdd an erster Stelle in die Dropdown Liste einfügen und die Eigenschaft Text soll auch noch mit sAdd gesetzt werden. Das Problem ist sobald "ComboBox.Items.Delete(i1)" ausgeführt wird lässt sich Text nicht mehr ändern und wird zu '' (leere string).

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure ComboBoxReplace(ComboBox:TComboBox; sAdd:String);
var  i1,i2                                    :Integer;
begin
  for i1:= ComboBox.Items.Count-1 downto 0  do
     if AnsiCompareText(ComboBox.Items.Strings[i1],sAdd) = 0 then
        ComboBox.Items.Delete(i1);
  ComboBox.Items.Insert(0,sAdd);
  ComboBox.Text:=sAdd;
end;


Für ein paar Tipps wäre ich dankbar

EDIT: ComboBox:=sAdd --> ComboBox.Text:=sAdd; Sry war ein Tippfehler


Lannes - So 25.11.07 00:34

Hallo,

bin etwas erstaunt das der Code bei Dir compiliert werden kann.

  ComboBox:=sAdd; :arrow:   ComboBox.Text := sAdd;
Ansonsten funktioniert es eigentlich.


Delete - So 25.11.07 01:36

Kann es gerade leider nicht testen, daher eine Vermutung. Aber ich hoffe ich kann dir trotzdem helfen.

Wenn ich richtig liege, wird die ComboBox durch das Löschen eines Items neu gezeichnet und DADURCH wird auch dessen Textfeld gelöscht. Mein erster Gedanke war, dass das Neuzeichnen erst nach dem Beenden der Prozedur ausgelöst wird und dadurch der neue Wert für Text nicht angenommen wird. Aber da die Eigenschaft Text bei Dir im Nachhinein zugewiesen wird, sollte es ein weiteres Neuzeichnen auslösen und dieses sollte dann den Text in die ComboBox schreiben.

Möglichkeiten:

1. Setze nach "ComboBox.Delete()" ein "ComboBox.ReFresh" ein. Dies sollte das 1. Neuzeichnen VOR dem Beenden der Prozedur erzwingen. Jetzt bin ich aber selber gespannt.

2. Anstatt "ComboBox.Text := sAdd" schreibe "ComboBox.ItemIndex := 0", damit wird das erste (ersetzte) Item auch gleich ausgewählt.


Ziltoid - So 25.11.07 02:41

Zitat:
2. Anstatt "ComboBox.Text := sAdd" schreibe "ComboBox.ItemIndex := 0", damit wird das erste (ersetzte) Item auch gleich ausgewählt.


Danke funktioniert so wie beschrieben =)


Delete - So 25.11.07 03:08

Ich möchte interessehalber noch mal nachhaken. Die 1. Möglichkeit hat nicht funktioniert?