Заполнение ComboBox с помощью C # - PullRequest
29 голосов
/ 10 марта 2010

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

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

English / En

Italian / It

Spainish / Sp 

etc....

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

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

Ответы [ 10 ]

65 голосов
/ 10 марта 2010

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

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;
17 голосов
/ 10 марта 2010

Создать класс 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"});
5 голосов
/ 10 марта 2010

Установите свойства 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 голосов
/ 10 марта 2010

Чтобы сделать его доступным только для чтения, от свойства 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";

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

3 голосов
/ 10 марта 2010
  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.

2 голосов
/ 12 февраля 2019

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

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";
2 голосов
/ 10 марта 2010

Что вы можете сделать, это создать новый класс, подобный примеру @ 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;
    }
}
1 голос
/ 06 июня 2012

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

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

KeyValuePair<string,string>
1 голос
/ 05 апреля 2011

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

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

0 голосов
/ 02 марта 2015

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

Например,

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...