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?
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;
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"});
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"));
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.
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.
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;
}
}
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.
Pas besoin d'utiliser un particulier de la classe de Langue,
remplacer par :
KeyValuePair<string,string>
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