web-dev-qa-db-ja.com

C#を使用してComboBoxを作成する

次のコンボボックスを作成したいと思います:

表示アイテム/アイテム値

English / En

Italian / It

Spainish / Sp 

etc....

助けてください?

また、コンボボックスにデータを入力した後、読み取り専用にすることもできますか?

29
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;
65
Allen Rice

クラス言語を作成する

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

簡単な方法は次のとおりです。

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
Tiago S

新しいクラスを作成せずに単に追加したい場合は、これを試してください:

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

C#に依存する必要がないようにサポートするすべての言語を含むxmlファイルをお勧めします。上記のプログラマーが提案するように、langugeのクラスを明確に作成します。

1
hidden

特定のクラス言語を使用する必要はありません。

次のように置き換えてください:

KeyValuePair<string,string>
1
Aelios

しかし、コンボボックス名を取得してからitems.add("")を取得するだけではありませんか?

例えば

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

これが役に立てば幸いです:D

0
Zyak