AGB  ·  Datenschutz  ·  Impressum  







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

strings einer combobox vergleichen

Ein Thema von neroo · begonnen am 6. Apr 2019 · letzter Beitrag vom 7. Apr 2019
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#1

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 18:57
Das dachte ich zuerst auch. Sieht aber so aus, als gäbe es da nur TStringList.Duplicates. Da TComboBox.Items aber vom Typ TStrings ist, gibt's da offenbar kein simples Property, um Duplikate zu verhindern. Daher ist die Variante mit TComboBox.Items.IndexOf wohl ein einfacher Workaround. Oder man erweitert TComboBox mit einer Ableitung um eine Methode, die die Existenz eines Strings in der Liste prüft.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 19:08
Ah. OK. Ich hatte nur im Hinterkopf, dass da was war.

Warum aber nicht erst alles in eine Stringliste packen und diese dann der Combobox zuweisen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.433 Beiträge
 
Delphi 7 Professional
 
#3

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 19:22
Ah. OK. Ich hatte nur im Hinterkopf, dass da was war.

Warum aber nicht erst alles in eine Stringliste packen und diese dann der Combobox zuweisen?
Weil TStringList intern die Methoden nutzt, die es von TStrings geerbt hat.

Man landet also in beiden Fällen zur Suche nach Dubletten bei IndexOf. Dann kann man es auch direkt verwenden
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 19:29
Lade die Liste erst mit dupIgnore in eine TStringsList und kopiere das Ergebnis dann EnBlock in die ComboBox.
Ist auch noch viel schneller als die Strings einzeln in die ComboBox zu bringen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
739 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 19:48
Zitat:
Warum aber nicht erst alles in eine Stringliste packen und diese dann der Combobox zuweisen?
Zitat:
Lade die Liste erst mit dupIgnore in eine TStringsList und kopiere das Ergebnis dann EnBlock in die ComboBox.
Ist auch noch viel schneller als die Strings einzeln in die ComboBox zu bringen.
In #6 ja bereits so gepostet. Der Ansatz macht aber nur Sinn, wenn die Combobox Elemente sortiert sein dürfen, da dupIgnore nur bei sortierten Listen Wirkung zeigt...
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 19:56
In #6 ja bereits so gepostet. Der Ansatz macht aber nur Sinn, wenn die Combobox Elemente sortiert sein dürfen, da dupIgnore nur bei sortierten Listen Wirkung zeigt...
Es macht auch Sinn, wenn sie nicht sortiert sein sollen, dann muss man halt mit IndexOf arbeiten. Es ist trotzdem deutlich schneller, weil keine Windows-Messages in der Gegend rumgeschickt werden.

Man kann auch mit zwei Stringlists arbeiten: Einer sortierten und einer unsortierten. Insert liefert -1 zurück, wenn der String beim Einfügen in eine sortierte Stringlist bereits existierte. In dem Fall fügt man ihn nicht in die unsoriterte ein.

Und noch ein Hinweis zum Code in #6: Statt Text zuzuweisen kann man auch gleich die StringList auf Items zuweisen.

combobox1.Items := Text;
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 20:05
Lade die Liste erst mit dupIgnore in eine TStringsList und kopiere das Ergebnis dann EnBlock in die ComboBox.
Ist auch noch viel schneller als die Strings einzeln in die ComboBox zu bringen.
Genau das habe ich doch vorgeschlagen!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: strings einer combobox vergleichen

  Alt 6. Apr 2019, 20:26
Lade die Liste erst mit dupIgnore in eine TStringsList und kopiere das Ergebnis dann EnBlock in die ComboBox.
Ist auch noch viel schneller als die Strings einzeln in die ComboBox zu bringen.
Genau das habe ich doch vorgeschlagen!
Deinen zweiten Post habe ich übersehen
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
neroo

Registriert seit: 5. Okt 2018
7 Beiträge
 
#9

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 12:57
Lade die Liste erst mit dupIgnore in eine TStringsList und kopiere das Ergebnis dann EnBlock in die ComboBox.
Ist auch noch viel schneller als die Strings einzeln in die ComboBox zu bringen.
Danke für eure Antworten

wie kann man die strings in der liste aufaddieren? denn die Liste läuft innerhalb einer while schleife und deshalb wird nur der letzte Eintrag zu der liste hinzugefügt.
Code:
stringlist:=TStringList.Create;
            stringlist.Sorted:=true;
            stringlist.Duplicates:=dupIgnore;
            with stringlist do
               begin
               add(etabelle.cells[1,i]);
               end;

            with ListBox1 do
              begin
              items.Assign(stringlist);
              end;

            stringlist.free;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 13:18
Wo ist da eine while-Schleife in deinem Code?

Code:
StringListe erzeugen
StringListe Eigenschaften setzen
while()
begin
  StringListe.Add();
end;
StringListe Combobox zuweisen
StringListe freigeben
Und lass das with-do bitte weg. Es erschwert das Debuggen und führt schnell zu schwer zufindeden Fehlern.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 7. Apr 2019 um 13:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:07 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