2

問題は奇妙です。DataSource プロパティ (displaymember と valuemember を含む bindingSource アイテムにバインドされます) を介してアイテムで正しく埋められたコンボボックスがあります。 ID ではなく名前です。問題は、デフォルトのオプション セットが必要なために SelectedValue を変更すると、List プロパティが空であることを発見したことです (コンボ ボックス クラスを別のクラスに継承しました)。 、おそらく問題は、データがデータソースから実際にロードされる時期に関連している可能性があります(おそらく、表示後にのみロードされますか?)。いつ SelectedValue を変更する必要がありますか?コントロールに「Shown」イベントがありません

提案をありがとう

更新 1: 私はあなたの方法でテストしましたが、そうではありません (キーは長いですが、キャストしても機能しません)。実際、興味深いのは、SelectedValue を設定できるセッターがあることです。例外がスローされない場合、次の MessageBox で Items.Count が値として 0 を返します。これは非常に奇妙です。コンボボックスがフォームに表示されると、必要なすべての値が含まれているためです。これが私のセッターのコードです:

    public object InputValue
    {
        get
        {
            return SelectedValue;
        }
        set
        { 
            SelectedValue = ((long)value);
            MessageBox.Show(this.Items.Count.ToString());
        }
    }
4

3 に答える 3

1

実際、Items コレクションはコンボボックスの最初の無効化の「周り」で満たされていると思っていたので、最初の無効化の前に SelectedValue として送信された値を一時変数に保存し、それを無効化されたイベント。

于 2010-11-28T16:05:20.627 に答える
1

この問題を経験したのはあなただけではありません。私だけではないと聞いてうれしいです。起こっていないのは、型変換と関係があります。データ ソース内の正確なSelectedValue型に明示的にキャストすると、値を正常に設定できることがわかります。

例えば:

comboBox1.ValueMember = "Value";
comboBox1.DisplayMember = "Key";
object ds = new KeyValuePair<string, long>[] {
    new KeyValuePair<string,long>("a",0),
    new KeyValuePair<string,long>("b",1),
    new KeyValuePair<string,long>("c",2),
    new KeyValuePair<string,long>("d",3),
    new KeyValuePair<string,long>("e",4)
};
comboBox1.DataSource = ds;
comboBox1.SelectedValue = 3;        // this won't work
comboBox1.SelectedValue = (long)3;  // this will work

何らかの理由で、long としての '3' は int としての '3' と同じComboBoxですが、型を正確に正しく取得しない限り、 はボールをプレーすることを拒否します。

ComboBoxこれは、WinFormsが COM バージョンのラッパーであり、ネイティブ コントロールが作成された後に異なる動作が示されるという事実と関係があると推測できます。

これがあなたの特定の問題に役立つことを願っています!

于 2010-11-02T06:17:16.020 に答える