Windows Forms ToolStripComboBox Text ändern

Gast #4871625
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
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.
Gast
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
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.
Gast
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.