Hallo Forum, ich habe eine Windows Forms Anwendung mit einem ToolStrip mit ComboBox. Ich möchte abhängig vom aufgeklappten bzw. zugeklappten Zustand der ComboBox einen anderen Text anzeigen lassen. Beispiel: aufgeklappt will ich eine Liste sehen mit folgenden Einträgen: Hans Meier Gerd Huber Sobald ein Eintrag ausgewählt ist, möchte ich nur noch z.B. "Hans" anzeigen lassen. Eine Bearbeitung des langen Textes mit String-Funktionen verbietet sich, da sich die Einträge erheblich unterscheiden können. Mein Lösungsansatz war, eine Klasse zu bauen, in der in zwei Variablen einmal der Kurzname (also im Beispiel "Hans") und einmal der ausgeschriebene Name ("Hans Meier") steht. Abhängig von einer weiteren bool Variable wird mit der ToString Funktion der entsprechende Text ausgegeben. Mehrere Objekte dieser Klasse werden in die Items-Liste der ComboBox gehängt. Nun kann ich bei verschiedenen Events die Variable so setzen, dass ich den langen Text oder den kurzen Text bekomme. Mein Problem ist, dass ich nicht weiß, wie ich auf die Klasse in der Items-Liste zugreifen kann (um z.B. die bool Variable zu ändern). Habt ihr eine Idee? Grüße Florian
Florian schrieb: > Mein Problem ist, dass ich nicht weiß, wie ich auf die Klasse in der > Items-Liste zugreifen kann (um z.B. die bool Variable zu ändern). von Objekt zurück auf deinen Typ casten, dann kannst du darauf zugreifen.
Peter II schrieb: > von Objekt zurück auf deinen Typ casten, dann kannst du darauf > zugreifen. So etwa? (MeineKlasse)ComboBox.Items[Index].Variable Das funktioniert leider nicht...
Eine mögliche, einfache Lösung (zumindest etwas eleganter wäre es, von der Combobox abzuleiten, falls möglich, und etwas in dieser Art dort zu implementieren):
1 | class User |
2 | {
|
3 | public User(string name, string shortName) |
4 | {
|
5 | Name = name; |
6 | ShortName = shortName; |
7 | }
|
8 | |
9 | public string Name { get; private set; } |
10 | public string ShortName { get; private set; } |
11 | }
|
1 | public Form1() |
2 | {
|
3 | InitializeComponent(); |
4 | InitializeComboBox(); |
5 | }
|
6 | |
7 | private void OnComboDropDown(object sender, EventArgs e) |
8 | {
|
9 | toolStripComboBox.ComboBox.DisplayMember = "Name"; |
10 | }
|
11 | |
12 | private void OnComboDropDownClosed(object sender, EventArgs e) |
13 | {
|
14 | toolStripComboBox.ComboBox.DisplayMember = "ShortName"; |
15 | }
|
16 | |
17 | private void InitializeComboBox() |
18 | {
|
19 | toolStripComboBox.Items.Add(new User("Max Mustermann", "Max")); |
20 | toolStripComboBox.Items.Add(new User("Susanne Sorglos", "Susi")); |
21 | toolStripComboBox.SelectedIndex = 0; |
22 | |
23 | toolStripComboBox.ComboBox.DisplayMember = "ShortName"; |
24 | toolStripComboBox.ComboBox.ValueMember = "Name"; |
25 | }
|
Sieht vielversprechend aus. Allerdings bekomme ich immer nur den ShortName...
Florian schrieb: > Sieht vielversprechend aus. > Allerdings bekomme ich immer nur den ShortName... Hast du mal geprüft, ob die Event-Handler aufgerufen werden? Falls nicht, hast du vermutlich nur den Code kopiert. Das reicht nicht. Du musst das Event einfügen (über die Liste der Events in den Properties der ComboBox: DropDown und DropDownClosed) und in die generierten Handler dann toolStripComboBox.ComboBox.DisplayMember = "Name"; bzw. toolStripComboBox.ComboBox.DisplayMember = "ShortName"; setzen.
Aber wenn man die Events auch einträgt, funktioniert´s ja doch ;-) Jetzt muss ich das nur noch in meine Anwendung übernehmen. Vielen Dank schon mal!
Jetzt funkioniert´s auch in meiner Anwendung. Vielen Dank nochmal und schönes Wochenende! Florian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.