![]() |
ComboBox.Items-Änderung löscht ComboBox.Text
Ich habe einen Eintrag in ComboBox.Text und ändere "im Hindergrund" die Items der Aufklappliste.
Noch nicht in meiner Funktion, aber kurz danach wird ComboBox.Text gelöscht (auch wenn wieder die gleichen Items zugewiesen wurden). Ich dachte, es würde eine Botschaft verschickt, wollte die mit Application.Processmessages vorziehen und den alten Text wieder zuweisen. Die Löschung des Textes erfolgt aber erst später. Weiß jemand Rat? |
AW: ComboBox .Items-Änderung löscht ComboBox.Text
Steht das Property Style auf csDropDownList?
Falls ja, bleibt der VCL nichts anderes übrig, als den ItemIndex auf -1 zu stellen, sobald du den Items eine neue Stringliste zuweist:
Delphi-Quellcode:
Workaround: ItemIndex vor Zuweisung an Items merken und danach wieder setzen
combobox.Style := csDropDownList;
combobox.Items := stringliste; combobox.ItemIndex := 2; // jetzt ist .Text = Items[2] combobox.Items := anderestringliste; // Ist das Gleiche wie combobox.Items.Assign(anderestringliste); // Innerhalb von [TStringList].Assign() wird [TStringList].Clear aufgerufen // Das Clear triggert das Event OnChange, dass wiederum in TCustomComboBox empfangen wird // da dann combobox.Items.Count = 0 ist // muss der ItemIndex auf -1 gesetzt werden |
AW: ComboBox.Items-Änderung löscht ComboBox.Text
Style ist csDropDown.
Der Text kann in der alten und/oder neuen Liste enthalten sein (muss aber auch nicht). Die Items ändere ich durch ComboBox.Items.Text := StringList.Text; Ich hätte nicht erwartet, dass das die ComboBox.Text-Eigenschaft löscht. Muss ich mir morgen Abend nochmal genauer anschauen. Danke schonmal! |
AW: ComboBox.Items-Änderung löscht ComboBox.Text
Habe es mal in einem Testprojekt untersucht.
Die Probleme entstehen, wenn die Items-Aktualisierung innerhalb ComboBox.OnChange erfolgt. Ich werde es daher in einem Timer nachträglich lösen.
Delphi-Quellcode:
unit fTestComboBox;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ComboBox1: TComboBox; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ComboBox1.Items.Add('x'); // nie ein Problem end; procedure TForm1.Button2Click(Sender: TObject); begin ComboBox1.Items.Clear; // außerhalb OnChange kein Problem, Text bleibt erhalten end; procedure TForm1.ComboBox1Change(Sender: TObject); // Items-Select begin // Button1Click(Sender); <-- kein Problem // Button2Click(Sender); <-- Text wird gelöscht end; end. |
AW: ComboBox.Items-Änderung löscht ComboBox.Text
Sichere den Text doch einfach vorher weg
|
AW: ComboBox.Items-Änderung löscht ComboBox.Text
Hab ich schon versucht in OnChange.
Allerdings ist auch der Text selbst bis zum Ende von OnChange noch korreekt gefüllt (lt. Debuger). Beim nächsten Schritt ist er aber leer... ItemIndex will (kann) ich auch nicht verwerten, da der aktuelle Text nach der Neuerstellung der Items dort u.U. nicht (mehr) enthalten sein kann. |
AW: ComboBox.Items-Änderung löscht ComboBox.Text
Delphi-Quellcode:
var
s:String; begin s := Combobox1.Text; Combobox1.Items.Text := 'ABC'#13#10'2'#13#10'3'; Combobox1.ItemIndex := Combobox1.Items.IndexOf(s); end; |
AW: ComboBox.Items-Änderung löscht ComboBox.Text
Problem gelöst, aber mal zur Info:
@Bummi: Das geht eben nicht, weil der Text evtl. vor und/oder nach der Items-Korrektur nicht in der Liste enthalten ist. Ein Problem bei nachträglicher Korrektur über einen Timer ist auch noch aufgetreten: Der Text wurde nicht geändert, aber der Cursor wurde vor das erste Zeichen zurückgesetzt. Dadurch war kein kontinuierliches Schreiben möglich. Ich ermittle die neue Liste jetzt im ComboBox.OnDropDown. (Ist ja wohl auch dafür gedacht :wink:) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz