AGB  ·  Datenschutz  ·  Impressum  







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

ComboBox.Items-Änderung löscht ComboBox.Text

Ein Thema von stahli · begonnen am 2. Nov 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#1

ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 2. Nov 2010, 22:59
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?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 2. Nov 2010 um 23:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: ComboBox .Items-Änderung löscht ComboBox.Text

  Alt 2. Nov 2010, 23:11
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:
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
Workaround: ItemIndex vor Zuweisung an Items merken und danach wieder setzen
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 2. Nov 2010, 23:19
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!
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 3. Nov 2010, 17:58
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 3. Nov 2010, 18:00
Sichere den Text doch einfach vorher weg
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 3. Nov 2010, 18:06
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 3. Nov 2010, 18:50
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von mkinzler ( 3. Nov 2010 um 18:51 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: ComboBox.Items-Änderung löscht ComboBox.Text

  Alt 3. Nov 2010, 19:32
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 )
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:35 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