Peupler un ComboBox en utilisant C#

je voudrais peupler un combobox avec ce qui suit:

valeur Visible de l'article / Article

English / En

Italian / It

Spainish / Sp 

etc....

Toute aide, s'il vous plaît?

il est aussi possible qu'après avoir peuplé le Combobox, de le faire lire seulement?

25
demandé sur Jim Fell 2010-03-10 18:11:16

9 réponses

définir une classe

public class Language
{
     public string Name { get; set; }
     public string Value { get; set; }
}

puis...

//Build a list
var dataSource = new List<Language>();
dataSource.Add(new Language() { Name = "blah", Value = "blah" });
dataSource.Add(new Language() { Name = "blah", Value = "blah" });
dataSource.Add(new Language() { Name = "blah", Value = "blah" });

//Setup data binding
this.comboBox1.DataSource = dataSource;
this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "Value";

// make it readonly
this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
63
répondu Allen Rice 2010-03-10 15:25:15

créer un langage de classe

public class Language
{
     public string Name{get;set;}
     public string Value{get;set;}
     public override string ToString() { return this.Name;}
}

puis, ajoutez autant de langage au combobox que vous voulez:

yourCombobox.Items.Add(new Language{Name="English",Value="En"});
16
répondu Gregoire 2010-03-10 15:24:20

mettez le ValueMember/DisplayMember propriétés pour le nom des propriétés de votre Language objets.

class Language
{
    string text;
    string value;

    public string Text
    {
        get 
        {
            return text;
        }
    }

    public string Value
    {
        get
        {
            return value;
        }
    }

    public Language(string text, string value)
    {
        this.text = text;
        this.value = value;
    }
}

...

combo.DisplayMember= "Text";
combo.ValueMember = "Value";
combo.Items.Add(new Language("English", "en"));
5
répondu thelost 2010-03-10 15:30:57

pour le faire en lecture seule, la propriété DropDownStyle à DropDownStyle.DropDownList.

pour peupler le ComboBox, vous aurez besoin d'un objet comme Language ou donc contenant les deux par exemple:

public class Language {
    public string Name { get; set; }
    public string Code { get; set; }
}

alors, vous pouvez attacher un IList à votre ComboBox.Propriété DataSource comme so:

IList<Language> languages = new List<Language>();
languages.Add(new Language("English", "en"));
languages.Add(new Language("French", "fr"));

ComboxBox.DataSource = languages;
ComboBox.DisplayMember = "Name";
ComboBox.ValueMember = "Code";

cela fera exactement ce que vous attendez.

4
répondu Will Marcouiller 2010-03-10 15:23:54
  Language[] items = new Language[]{new Language("English", "En"),
                new Language("Italian", "It")};

            languagesCombo.ValueMember = "Alias";
            languagesCombo.DisplayMember = "FullName";
            languagesCombo.DataSource = items.ToList();

            languagesCombo.DropDownStyle = ComboBoxStyle.DropDownList;

 class Language
    {
        public string FullName { get; set; }
        public string Alias { get; set; }

        public Language(string fullName, string alias)
        {
            this.FullName = fullName;
            this.Alias = alias;
        }
    }

en faisant votre boîte de dépôt "en lecture seule" je suppose que vous voulez empêcher l'utilisateur de dactylographier dans d'autres options au lieu d'être entièrement en lecture seule où les utilisateurs ne peuvent pas choisir une valeur??

si vous voulez qu'il soit entièrement lu, vous pouvez définir la propriété enabled comme false.

3
répondu MarkB29 2010-03-10 15:19:47

ce que vous pouvez faire est de créer une nouvelle classe, similaire à l'exemple de @Gregoire, cependant, vous voudriez annuler le ToString() méthode pour qu'elle apparaisse correctement dans la boîte combo par exemple

public class Language
{
    private string _name;
    private string _code;

    public Language(string name, string code)
    {
        _name = name;
        _code = code;
    }

    public string Name { get { return _name; }  }
    public string Code { get { return _code; } }
    public override void ToString()
    {
        return _name;
    }
}
2
répondu James 2010-03-10 15:25:17

Si vous souhaitez simplement ajouter sans créer une nouvelle classe, essayez ceci:

// WPF
<ComboBox Name="language" Loaded="language_Loaded" /> 


// C# code
private void language_Loaded(object sender, RoutedEventArgs e)
{
    List<String> language= new List<string>();
    language.Add("English");
    language.Add("Spanish");
    language.Add("ect"); 
    this.chartReviewComboxBox.ItemsSource = language;
}

je suggère un fichier xml avec tous les langages que vous allez supporter de cette façon, vous ne devez pas dépendre de c# Je créerais définitivement une classe pour languge comme le suggère le programmeur ci-dessus.

1
répondu hidden 2011-10-18 13:06:32

Pas besoin d'utiliser un particulier de la classe de Langue,

remplacer par :

KeyValuePair<string,string>
1
répondu Aelios 2012-06-06 09:30:08

mais est-ce que vous ne vous contentez pas d'obtenir votre nom de boîte bascule et ensuite items.add("")?

Par exemple

Language.Items.Add("Italian");
Language.Items.Add("English");
Language.Items.Add("Spanish");

espérons que cela a aidé: D

0
répondu Zyak 2015-03-02 15:29:32