Windows Forms ToolStripComboBox Text ändern

Gast #4871625
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
Gast #4871682
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
}
Gast #4871791
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren