0

Windowsフォームアプリにコンボボックスがあり、特定のオプションに値を設定したい。

今、私はオプションを置くことができるだけです、そして私がそれを選ぶとき-私はそれを介してそれを得ることができます

combobox.text 

私の目標は、コンボボックスにファイル名をリストし、それらへのパスを値に含めることです。

例:テキストis = "option1" value is = "value1"、どうすればよいですか?

私はそれについていくつかのトピックを見ましたが、それらは約2歳であり、おそらく何かが変更されたため、これらのソリューションはそれほど友好的ではありませんでした:]

アップデート

私はあなたの解決策に1つの問題があります、Mahmoud Gamal :)

私はそれをこのようにやっています:

        List<Foo> combo3data = new List<Foo>();

        categories = Directory.GetDirectories(@"C:\banners\categories\");

        // There are 3 different paths in categories[] array (category1, category2 and 3)

        Foo categoryInsert = new Foo();

        foreach (string s in categories)
        {
            categoryInsert.path = s;
            categoryInsert.name = s;
            combo3data.Add(categoryInsert);
        }

        comboBox3.DataSource = combo3data;
        comboBox3.ValueMember = "path";
        comboBox3.DisplayMember = "name";

その後、私のcomboBox3には3つの利用可能なオプション(正しい)がありますが、それらはすべて同じです(オプション#1と同じ)-それはなぜですか?

4

2 に答える 2

3

次の2つのプロパティを探しています。

あなたの場合、コンボボックスのValueMemberプロパティをに設定しvalue1DisplayMemberプロパティをに設定する必要がありますoption1

更新:以下は、いくつかのエンティティのリストからコンボボックスのアイテムを設定する方法の例ですFoo

public class Foo(){
    public string Id { get; set; }
    public string Name { get; set; }
}

 var ds = new List<Foo>(){
     new Foo { Id = "1", Name = "name1" },
     new Foo { Id = "2", Name = "name2" },
     new Foo { Id = "3", Name = "name3" },
     new Foo { Id = "4", Name = "name4" },
 };

 comboboxName.DataSource = ds;
 comboboxName.ValueMember = "Id";
 comboboxName.DisplayMember = "Name";

Update2:毎回同じオブジェクトを追加しているためです。コードの次のブロック:

Foo categoryInsert = new Foo();

foreach (string s in categories)
{
    categoryInsert.path = s;
    categoryInsert.name = s;
    combo3data.Add(categoryInsert);
}

毎回、それが行うすべてのことforeachを繰り返すとcategories、同じオブジェクトcategoryInsertの値が変更され、新しいオブジェクトは作成pathされません。nameしたがって、各反復で同じオブジェクトがに追加されることになりcombo3dataます。必要なのは、毎回それ自体Fooの中に新しいオブジェクトを作成することです。つまり、ループの内側に移動します。何かのようなもの:foreachFoo categoryInsert = new Foo();foreach

foreach (string s in categories)
{
    Foo categoryInsert = new Foo();
    categoryInsert.path = s;
    categoryInsert.name = s;
    combo3data.Add(categoryInsert);
}
于 2012-07-16T11:29:43.170 に答える
1

comboBox.Textこのコンボボックスに関連付けられたテキストを設定または取得するために使用します。for ValuescomboBox.ValueMemberは、ListControl内のアイテムの実際の値に使用します。または、値をに格納することもできます。comboBox.Tag

于 2012-07-16T11:30:05.167 に答える