web-dev-qa-db-fra.com

Remplir une zone de liste déroulante à l'aide de C #

Je voudrais peupler une liste déroulante avec les éléments suivants:

Article visible/Valeur de l'objet

English / En

Italian / It

Spainish / Sp 

etc....

Toute aide s'il vous plaît?

En outre, il est possible qu'après avoir rempli la liste déroulante, la lire uniquement?

28
mouthpiec

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;
64
Allen Rice

Créer un cours de langue

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

Ensuite, ajoutez autant de langues que vous le souhaitez dans la liste déroulante:

yourCombobox.Items.Add(new Language{Name="English",Value="En"});
17
Gregoire

Définissez les propriétés ValueMember/DisplayMember sur le nom des propriétés de vos objets Language.

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
thelost

Pour le rendre en lecture seule, la propriété DropDownStyle à DropDownStyle.DropDownList.

Pour remplir la zone de liste déroulante, vous devez disposer d'un objet comme Language ou similaire, qui contient les deux, par exemple:

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

Ensuite, vous pouvez lier un IList à votre propriété ComboBox.DataSource de la manière suivante:

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
Will Marcouiller
  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 en sorte que votre liste déroulante soit "en lecture seule", je suppose que vous souhaitez empêcher l'utilisateur de saisir d'autres options au lieu d'être entièrement en lecture seule, lorsque les utilisateurs ne peuvent pas sélectionner une valeur ??

Si vous voulez qu'elle soit entièrement en lecture seule, vous pouvez définir la propriété enabled sur false.

3
MarkB29

Ce que vous pouvez faire est de créer une nouvelle classe, semblable à l'exemple de @ Gregoire. Cependant, vous voudriez remplacer la méthode ToString() afin qu'elle apparaisse correctement dans la liste déroulante, 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
James

Si vous voulez simplement l'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 toutes vos langues que vous supporterez. De cette façon, vous ne serez pas obligé de dépendre de c # Je créerais définitivement une classe pour languge comme le suggère le programmeur ci-dessus. 

1
hidden

Pas besoin d'utiliser une classe de langage particulière,

Il suffit de le remplacer par:

KeyValuePair<string,string>
1
Aelios

Manière simple est:

Dictionary<string, string> dict = new Dictionary<string, string>()
{
    {"English ","En" },
    {"Italian  ","It" },
    {"Spainish  ","Sp " }
};

combo.DataSource = new BindingSource(dict, null);
combo.DisplayMember = "Key";
combo.ValueMember = "Value";
1
Tiago S

mais n'obtenez-vous pas simplement le nom de votre liste déroulante, puis items.add("")?

Par exemple 

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

J'espère que cela a aidé: D

0
Zyak