1

「密かに」や「慎重に」などの値をコンボボックスに表示する必要がありますが、その後、これらの単語の基礎となる DB 値 (「S」や「D」など) に基づいてコンボボックスの SelectedItem を設定できるようにする必要があります。

これにはコンボボックスの DisplayMember プロパティと ValueMember プロパティを使用できると思いますが、その後、実際の (valuemember) 値を使用して次のようなことを行うことができます。

comboBoxAdverbs.SelectedIndex = comboBoxAdverbs.Items.IndexOf(weirdAdverbs[CURRENT_ADVERB]);

"weirdAdverbs[CURRENT_ADVERB]" には "S" や "D" などの値が含まれているため、もちろん、comboBox に "ひそかに" や "慎重に" という値が含まれている場合、SelectedIndex を見つけて設定することはできません。

コンボボックスのアイテム タグの値を "S" と "D" に設定すると (それが可能であると仮定して)、これらの値をループできますが、"IndexOf() " その上。

4

3 に答える 3

3

これにはテンプレート クラスを使用しますが、非常に便利です。コンボ ボックスには任意のテキストが表示され、値を格納できます。

    public class cboItem<T>
{
    public cboItem(string name, T value)
    {
        this.Name = name;
        this.Value = value;
    }

    public string Name { get; set; }
    public T Value { get; set; }
    public override string ToString()
    {
        return Name == null ? "" : Name;
    }
}
于 2012-07-17T01:10:59.127 に答える
2

コンボ ボックスの項目は、クラス/構造体を含め、何でもかまいません。デフォルトでは、ToString() 実装を使用して項目を表示しますが、一連のオブジェクトを設定する場合は、DisplayMember と ValueMember を使用して大きな効果を得ることができます。

いくつかのアイデアを提供するための簡単な例として、奇妙な動詞コードとその説明的な名前の一連の KeyValuePair インスタンスにコンボ ボックスをバインドします。または、linq を使用して匿名型を構成したり、独自の適切なクラス/構造体を作成したりできます。

private void populateCombo()
{
    comboBoxAdverbs.Items.Clear();
    comboBoxAdverbs.Items.Add( new Tuple<string, string>( "S", "Surreptitiously" ) );
    comboBoxAdverbs.Items.Add( new Tuple<string, string>( "D", "Discreetly" ) );
    comboBoxAdverbs.DisplayMember = "Item2";
}

次に、提供されたコードに一致するアイテムを選択するコード内: (つまり、「D」)

var item = comboBoxAdverbs.Items
    .OfType<Tuple<string,string>>()
    .FirstOrDefault(i => string.Compare(i.Item1, textBox1.Text, true) == 0);

if (item != null)
    comboBoxAdverbs.SelectedItem = item;

これは、キーを入力 (この場合はテキスト ボックスの値) と比較して一致する項目を見つけようとし、一致が見つかった場合は、SelectedItem を設定して、コンボ ボックスにそれを選択するように指示します。

** 編集: おっと、元々 KeyValuePair を使用していましたが、構造体であることに気づかなかったので、Null チェック機能はありませんでした。タプルに変更(基本的にペア)

于 2012-07-17T01:12:34.133 に答える
0

私にとってうまくいくことがわかったのは、selectedindex 値を設定した後、コンボボックスの Tag プロパティに格納することです。次に、ユーザーが「読み取り専用」状態にあるはずの selectedIndex を変更しようとした場合は、Tag プロパティに格納されている selectedIndex 値に戻します。

comboBoxPlatypusId.SelectedIndex = comboBoxPlatypusId.Items.IndexOf(DuckbillVals[Duckbill_PlatypusID]);
comboBoxPlatypusId.Tag = comboBoxPlatypusId.SelectedIndex;
...
private void comboBoxFunnyMammals_SelectedValueChanged(object sender, EventArgs e) {
    var cb = sender as ComboBox;
    if (cb != null)
    {
        int validSelection = Convert.ToInt32(cb.Tag);
        if (cb.SelectedIndex != validSelection) {
            cb.SelectedIndex = validSelection;
        }
    }
}
于 2012-07-18T23:19:11.753 に答える