Entwickler-Ecke
WinForms - DropDown Menü füllen
sharpx - Do 08.01.09 10:25
Titel: DropDown Menü füllen
Hallo,
Folgende Aufgabe:
Aus einer Textdatei einen Inhalt auslesen, in ein Array und den Inhalt in einem DropDown Menü dartellen.
Gelöst hab ichs so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| ArrayList dropd = new ArrayList(); for (int i=0; i<tr.Length; i++) { if (tr[i] != null) dropd.Add(tr[i]); } taet.DataSource = dropd; |
tr ist das Array welches Einträge enthält.
Das funktioniert auch alles recht schön, das DropDown menü zeigt mir auch alle Einträge an, nur kann ich einfach keinen Auswählen. Es ist Standardmäßig der erste Eintrag ausgewählt. Öffne ich das DropDown Menü, zeigt es mir sämtliche Einträge, aber wenn ich einen anklicke, passiert rein gar nichts. Es wird immer nur der erste Eintrag ausgewählt.
Habe ich irgendwo einen Denkfehler?
Danke für die Hilfe
sharpx - Do 08.01.09 10:37
Ich hab mich ein bisschen durch die Methoden gekämpft und bin auf folgendes gestoßen:
Ich denke das würde meinen FEhler beheben, jedoch:
| Zitat: |
Für die Eigenschaft oder den Indexer System.Windows.Forms.Control.CanSelect kann keine Zuweisung ausgeführt werden. Sie sind schreibgeschützt. (CS0200) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\MainForm.cs:463,4
|
Würde es reichen, wenn ich den DropDown eifnach auf public setze?
EDIT:
So hab mir das mal angesehen, scheint nicht zu helfen.
CanSelect scheint auch nicht das richtige zu sein...
Kann mir wer weiterhelfen?
JüTho - Do 08.01.09 11:46
Hallo,
soweit solltest Du inzwischen sein, dass Du uns vollständige Informationen gibst: Welche Klasse benutzt Du für das DropDown-Menü?
Dein Hauptfehler liegt wohl darin:
| Zitat: |
| Öffne ich das DropDown Menü, zeigt es mir sämtliche Einträge, aber wenn ich einen anklicke, passiert rein gar nichts. |
Damit beim Anklicken etwas passiert, muss ein Click-EventHandler zugewiesen werden. Du brauchst also irgendwo eine oder mehrere Methoden, die zu einem Click passen, und die müssen registriert werden. Es fehlen also solche Programmteile:
C#-Quelltext
1: 2:
| private void ClickEventHandler_fuer_Item17(object sender, EventArgs e) { ... } MenuItem item17.Click += ClickEventHandler_fuer_Item17; |
Nebenbei: Ich hatte Dich schon früher um aussagefähige Bezeichner gebeten. ArrayList gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden; verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic.
Gruß Jürgen
sharpx - Do 08.01.09 11:54
Ganz ehrlich bin ein bisschen verwirrt.
Hab dir jetzt einmal ein paar Bilder gemacht, damit sollte es verständlicher werden:
sharpx - Do 08.01.09 11:56
Also so könnte man es auswählen.
Wenn man was auswählt sollte eigentlich gar nicths passieren, außer eben dass die Option selected ist und dann eben DropDown.Text auf die Auswahl zeigt. Das würde mir schon reichen!
Bin jetzt ein bisschen verwirrt.
Vorher war der Code statisch d.h. die Einträge habe ich über den Designer zugewisen, da ging alles. Jetzt weiße ich die Einträge über den Code zu und jetzt kann ich keinen Eintrag auswählen, obwohl er mir die anzeigt?
Ralf Jansen - Do 08.01.09 12:18
Ahh, du sprichst von einer Combobox. Da muß man erst mal drauf kommen.
Da du nun über eine Datasource bindest mußt du auch DisplayMember und ValueMember setzen. Eine Datasource könnte ja potenziell mehrere Spalten enthalten deshalb muß man auswählen welche angezeigt werden soll (Displaymember) und welche den logischen Index in der Datenmenge(ValueMember) darstellt.
Edit:
Sehe gerade das du eine ArrayList verwendest. Ich habe keine Ahnung wie die sich verhält. Wer benutzt sowas noch freiwillig? Insofern ist meine Antwort mit Vorsicht zu genießen.
JüTho - Do 08.01.09 12:24
Ich sag's doch: korrekte Informationen helfen ungemein.
Es handelt sich also überhaupt nicht um ein DropDown-Menü, sondern um eine stinknormale ComboBox. :roll: Die Items der ComboBox kommen aus der ArrayList.
Seltsam kommt mir vor, dass Du in der set_dropdown-Methode die ArrayList neu deklarierst und erzeugst und durch Übergabe als DataSource willst, dass sie auch danach noch existiert. Das würde ich auf jeden Fall vermeiden; wenn die ArrayList im Formular insgesamt benötigt wird (nämlich als DataSource), sollte sie auch dort deklariert und erstellt werden. Nur das Zuweisen der Elemente würde in die set-Methode passen.
Wie gesagt, ich empfehle dringend, List<string> stattdessen zu verwenden.
Zum eigentlichen Problem: Das ist dadurch vielleicht schon erledigt. Überprüfe DropDownStyle; das kann sich mit der Zuordnung von DataSource "beißen". Wird im SelectedIndexChanged- oder SelectedValueChanged-Ereignis etwas festgelegt? Wenn beide Ereignisse fehlen, dann kannst Du SelectedIndexChanged einfügen, setze dort etwas ein, was wirklich ausgeführt werden muss, und setze dort einen Haltepunkt für den Debugger; dann kannst Du schrittweise prüfen, ob und ggf. wo SelectedIndex geändert bzw. zurückgesetzt wird.
Ralfs Hinweis hilft vermutlich nicht, weil die ArrayList keine "besonderen" Eigenschaften zur Verfügung stellt, sodass sowohl als DisplayMember als auch als ValueMember ToString verwendet werden dürfte. (Aber das ist wirklich nur eine Vermutung.)
Gruß Jürgen
PS. Schön, dass Du einen Monitor mit etwa 2000 Pixel Breite hast, sodass trotz Deiner Bilder horizontal nicht gescrollt werden muss. Ich kann die Beiträge jetzt nicht mehr vernünftig lesen (so etwas hält mich ebenfalls von Antworten ab).
sharpx - Do 08.01.09 12:33
Hallo Jürgen,
Habe jetzt list benutzt und deine weiteren tipps beherzigt.
funktioniert alles wieder :=)
vielen dank schon wieder :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!