it-roy-ru.com

Заполнение ComboBox с помощью C #

Я хотел бы заполнить поле со следующим:

Видимый элемент/Значение элемента

English / En

Italian / It

Spainish / Sp 

etc....

Любая помощь, пожалуйста?

Также возможно, что после заполнения Combobox, сделать его только для чтения?

28
mouthpiec

Определить класс

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

Создать класс Language

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"});
17
Gregoire

Задайте для свойств 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"));
5
thelost

Чтобы сделать его доступным только для чтения, используйте свойство DropDownStyle для DropDownStyle.DropDownList.

Для заполнения ComboBox вам понадобится объект типа Language или около того, содержащий оба объекта, например:

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";

Это будет делать именно то, что вы ожидаете.

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;
        }
    }

Делая выпадающий список «только для чтения», я предполагаю, что вы хотите запретить пользователю вводить другие параметры, в отличие от полностью доступного только для чтения, когда пользователи не могут выбрать значение ??

Если вы хотите, чтобы он был полностью доступен только для чтения, вы можете установить для свойства enabled значение false.

3
MarkB29

Что вы можете сделать, так это создать новый класс, подобный примеру @ 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;
    }
}
2
James

Если вы просто хотите добавить его без создания нового класса, попробуйте это:

// 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 со всеми вашими языками, которые вы будете поддерживать Таким образом, вам не нужно зависеть от c # Я бы определенно создал класс для языка, как предлагает вышеупомянутый программист. 

1
hidden

Не нужно использовать определенный класс Language,

Просто замените его на:

KeyValuePair<string,string>
1
Aelios

Простой способ это:

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

но разве вы не просто получаете имя вашего поля со списком, а затем items.add("")?

Например 

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

Надеюсь, это помогло: D

0
Zyak