Forum: PC-Programmierung Windows Forms ToolStripComboBox Text ändern


von Florian (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von Florian (Gast)


Lesenswert?

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...

von Ferdinand Freiherr fon Flitzpiep (Gast)


Lesenswert?

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
}

von Florian (Gast)


Angehängte Dateien:

Lesenswert?

Sieht vielversprechend aus.
Allerdings bekomme ich immer nur den ShortName...

von Ferdinand Freiherr fon Flitzpiep (Gast)


Lesenswert?

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.

von Florian (Gast)


Lesenswert?

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!

von Florian (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.