Я хотел бы заполнить поле со списком:
Видимый элемент/значение позиции
English / En
Italian / It
Spainish / Sp
etc....
Любая помощь пожалуйста?
Также возможно, что после заполнения Combobox, чтобы сделать его только для чтения?
Я хотел бы заполнить поле со списком:
Видимый элемент/значение позиции
English / En
Italian / It
Spainish / Sp
etc....
Любая помощь пожалуйста?
Также возможно, что после заполнения Combobox, чтобы сделать его только для чтения?
Определить класс
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;
Создать класс Язык
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"});
Задайте свойства 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"));
Чтобы сделать его доступным только для чтения, свойство 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";
Это будет делать именно то, что вы ожидаете.
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.
Что вы можете сделать, так это создать новый класс, аналогичный примеру @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;
}
}
Если вы просто хотите добавить его без создания нового класса, попробуйте это:
// 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 файл со всеми вашими языками, которые вы будете поддерживать таким образом, вам не нужно зависеть от С# Я бы определенно создал класс для того, что предложил выше программист.
Не нужно использовать определенный класс Language,
Просто замените его на:
KeyValuePair<string,string>
но вы не просто получите свое имя поля со списком, а затем items.add("")
?
Например
Language.Items.Add("Italian");
Language.Items.Add("English");
Language.Items.Add("Spanish");
Надеюсь, это помогло: D