Autor Beitrag
Ziltoid
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 24.11.07 23:13 
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).
ausblenden 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


Zuletzt bearbeitet von Ziltoid am So 25.11.07 00:40, insgesamt 1-mal bearbeitet
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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 =)
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 25.11.07 03:08 
Ich möchte interessehalber noch mal nachhaken. Die 1. Möglichkeit hat nicht funktioniert?