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?
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 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"});
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"));
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.
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.
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;
}
}
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.
Pas besoin d'utiliser une classe de langage particulière,
Il suffit de le remplacer par:
KeyValuePair<string,string>
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";
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