AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zuweisen einer TStringList zu mehreren TComboBoxen
Thema durchsuchen
Ansicht
Themen-Optionen

Zuweisen einer TStringList zu mehreren TComboBoxen

Ein Thema von Giftpilz · begonnen am 6. Feb 2007 · letzter Beitrag vom 8. Feb 2007
Antwort Antwort
Giftpilz

Registriert seit: 5. Jan 2007
8 Beiträge
 
#1

Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 15:51
Hallo Community
vllt. könnt Ihr mir helfen: In meiner Form erzeuge ich zur Laufzeit mehrere TComboBoxen, welche alle mit der gleichen Stringliste befüllt werden sollen. Also habe ich mir eine TSTringList gebastelt:

MyList:=TStringList.Create; //globales Objekt, wird im Konstruktor erzeugt und im Destruktor zerstört
//Die Combos werden in einer for-Schleife erzeugt:
comboBox[iCnt]:= TComboBox.Create;
comboBox[iCnt].Parent:=self;
comboBox[iCnt].Items.Assign(MyList);

Wie kann ich eine Referenz auf MyList übergeben, so, dass jede Änderung an MyList automatisch an ALLE Combos weitergereicht wird?
Hintergrund: Wenn eine String in einer Combo ausgewählt wurde, darf dieser in keiner anderen Box mehr auftauchen (eine doppelte Auswahl muss unbedingt verhindert werden), weshalb ich am Liebsten den gewählten String aus MyList löschen würde... Blöderweise hat aber offensichtlich jede ComboBox ihre eigene Liste...

Vielen Dank im Voraus für Eure Hilfe
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 15:59
Vielleicht hilft dir eine völlig andere Benutzeroberfläche.
Statt mehrere Comboboxen gibt es nur 2 Listboxen.
In der linken Listbox ist der Vorrat aller möglichen Strings;
in der rechten Listbox werden die gewählten Strings in ihrer Reihenfolge angezeigt.
Wähl mal im Delphi Menu: Datei -> Neu -> Formulare -> "Dialog mit zwei Listenfeldern" und
du bekommst ein Formular, das du abkupfern kannst.
Durch diese Benutzeroberfläche wird schon von Grund auf verhindert, dass man zweimal
das Gleiche auswählen kann.
Andreas
  Mit Zitat antworten Zitat
Giftpilz

Registriert seit: 5. Jan 2007
8 Beiträge
 
#3

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 16:19
Hallo Shmia
Vielen Dank für Deine Antwort. Leider sind zwei Listboxen keine Option.
Ich Importiere eine CSV-Datei und lasse die Überschriften in einer Tabellenzeile anzeigen. In der Zweiten Zeile stehen die oben erwähnten Comboxen. Der Benutzer wählt nun in der zweiten Zeile per DropDown den Feldnamen, in den die CSV-Spalten übertragen werden sollen.
Meine aktuelle Lösung sieht BTW so aus, dass bei Änderung des Strings dieser aus meiner globalen Liste gelöscht und anschliessend per for-Schleife jeder einzelnen Combo zugewiesen wird. Das funktioniert zwar, dauert aber jedesmal relativ lange (vom Speicherbedarf mal abgesehen). Deshalb würde ich gerne auf eine einzige Stringliste per Referenz zugreifen...
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 16:31
Dass das so lange dauern soll, kann ich mir irgendwie nicht vorstellen
Ich habe mal einen ReimGenerator geschrieben, der im Kern auch mit einer StringList arbeitet. Und ich habe ungefähr 200.000 Begriffe in der Stringlist und suche immer Begriffe raus und ordne sie einer ListBox zu... das dauert bei 100 Begriffen keine Sekunde...
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 16:36
Zitat von Giftpilz:
Ich Importiere eine CSV-Datei und lasse die Überschriften in einer Tabellenzeile anzeigen. In der Zweiten Zeile stehen die oben erwähnten Comboxen. Der Benutzer wählt nun in der zweiten Zeile per DropDown den Feldnamen, in den die CSV-Spalten übertragen werden sollen.
Das ist aber gerade falsch herum, denn auf diese Weise kannst du ein CSV-Feld nur einmal benützen.

Angenommen deine Zieltabelle hat 10 Felder: F01 bis F10
Deine CSV-Datei habe 8 Felder: CSV#1 bis CSV#8
Dann könnte eine Feldzuordnung so aussehen:
Code:
F01 <- CSV#1
F02 <- CSV#2
F03
F04
F05
F06
F07 <- CSV#6
F08 <- NOW()
F09 <- CSV#6
F10
Felder, die oben nicht zugeordnet wurden, werden mit NULL befüllt.
Die Zuordnung bei NOW() bedeutet, dass die Information für "F08" nicht aus der CSV-Datei kommt, sondern einen internen Wert (aktuelles Datum+Uhrzeit) erhält.
Wie man sieht sind die Felder der Zieltabelle fest vorgegeben, während die CSV-Felder durchaus mehrfach benützt werden dürfen.
Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 16:37
Hallo,

was dauert denn lange, der globale Code oder
das Eintragen in die ComboBoxen ?

Beim 2.: Schon mit ComboBox.Items.BeginUpdate/EndUpdate probiert ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Giftpilz

Registriert seit: 5. Jan 2007
8 Beiträge
 
#7

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 16:58
Hei Hoika
Das Eintragen in die ComboBoxen dauert relativ lange. Es sit so, dass man beim Zuklappen einer Combobox eine kurze(!) Verzögerung mitbekommt (das ist für mich "relativ lange"). Begin- und EndUpdate sind drin.
Aber um mal konkret zu werden: Gibt es keine Möglichkeit, einen einzige StringListe für alle Combos zu verwenden?

BTW: @Shmiaie CSV-importierten Felder kommen zunächst zum DB-Server (PostgreSQL), und werden dann per plpgsql in ca. 20 Tabellen verteilt. Deshalb darf Jeder CSV-Wert nur einmal verwendet werden.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 6. Feb 2007, 17:08
Zitat von Giftpilz:
Aber um mal konkret zu werden: Gibt es keine Möglichkeit, einen einzige StringListe für alle Combos zu verwenden?
Kurze Antwort: Nein - jedenfalls nicht einfach.
TComboBox kapselt nur das entsprechende Win32-Control und dies benötigt seine eigene Liste. Und an dieser Tatsache liegt auch die Verzögerung begründet.

Du könntest aber mittels Ownerdraw+eigene Datenhaltung versuchen das gewünschte verhalten nachzubauen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Giftpilz

Registriert seit: 5. Jan 2007
8 Beiträge
 
#9

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 8. Feb 2007, 08:04
Hallo
vielen Dank für Eure Hilfe, mal sehen, wie ich da weiter vorgehe...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Zuweisen einer TStringList zu mehreren TComboBoxen

  Alt 8. Feb 2007, 10:31
Herzlich willkommen in der Delphi-PRAXiS, Giftpilz.

Ich stelle mir eine Datenbanktabelle mit 200 Feldern vor. Nach deinem Ansatz stehen die alle nebeneinander in einem Grid, damit ich in einer darunter angezeigten ComboBox das Field-Mapping angeben kann? Aus naheliegenden Gründen ordnen andere Tools die Felder vertikal an - man sieht einfach mehr.

Auch über deine Idee, die zugeordneten Felder aus der Vorratsliste zu entfernen, solltest du nochmal nachdenken: Du kannst die Zuordnung für ein Feld nach deinem Ansatz erst wieder ändern, wenn du die ComboBox lokalisiert hast, in der du dieses Feld falsch zugeordnet hast. Nicht sehr benutzerfreundlich. Ich würde den Vorrat unangetastet lassen und über eine Markierung nachdenken, welche dem Benutzer signalisiert, welche Felder bereits zugeordnet wurden und welche nicht.

Freundliche Grüße vom marabu
  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 02:50 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