Заполнение ComboBox с помощью С#
Я хотел бы заполнить поле со списком:
Видимый элемент/значение позиции
English / En
Italian / It
Spainish / Sp
etc....
Любая помощь пожалуйста?
Также возможно, что после заполнения Combobox, чтобы сделать его только для чтения?
Ответы
Ответ 1
Определить класс
public class Language
{
public string Name { get; set; }
public string Value { get; set; }
}
то...
//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;
Ответ 2
Создать класс Язык
public class Language
{
public string Name{get;set;}
public string Value{get;set;}
public override string ToString() { return this.Name;}
}
Затем добавьте столько слова в выпадающее поле, которое вы хотите:
yourCombobox.Items.Add(new Language{Name="English",Value="En"});
Ответ 3
Задайте свойства ValueMember
/DisplayMember
для имени свойств ваших объектов 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"));
Ответ 4
Чтобы сделать его доступным только для чтения, свойство DropDownStyle для DropDownStyle.DropDownList.
Чтобы заполнить ComboBox, вам нужно будет иметь такой объект, как Язык или так, содержащий оба примера:
public class Language {
public string Name { get; set; }
public string Code { get; set; }
}
Затем вы можете привязать IList к свойству ComboBox.DataSource, например:
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";
Это будет делать именно то, что вы ожидаете.
Ответ 5
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;
}
}
Создав свой раскрывающийся список "только для чтения", я предполагаю, что вы хотите запретить пользователю вводить другие параметры, а не полностью читать только там, где пользователи не могут выбрать значение
Если вы хотите, чтобы он был полностью доступен только для чтения, вы можете установить для свойства enabled значение false.
Ответ 6
Что вы можете сделать, так это создать новый класс, аналогичный примеру @Gregoire, однако вы бы хотели переопределить метод ToString()
, чтобы он отображался правильно в поле со списком, например.
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;
}
}
Ответ 7
Если вы просто хотите добавить его без создания нового класса, попробуйте это:
// 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;
}
Я предлагаю xml файл со всеми вашими языками, которые вы будете поддерживать
таким образом, вам не нужно зависеть от С#
Я бы определенно создал класс для того, что предложил выше программист.
Ответ 8
Не нужно использовать определенный класс Language,
Просто замените его на:
KeyValuePair<string,string>
Ответ 9
но вы не просто получите свое имя поля со списком, а затем items.add("")
?
Например
Language.Items.Add("Italian");
Language.Items.Add("English");
Language.Items.Add("Spanish");
Надеюсь, это помогло: D