0

私の質問は、「selectedItemとテキスト値を変更/入力せずにデータをcomboBoxにバインドする方法はありますか?」です。(コンボボックスを空白のままにしておきたい)

これは私がしていることの例です:

        Dictionary<int,string> test = new Dictionary<int,string>();
        test.Add(1, "Company1");
        test.Add(2, "Company2");
        test.Add(3, "Company3");
        test.Add(4, "Company4");
        test.Add(5, "Company5");
        test.Add(6, "Company6");

        var list = test.Select(x => new { CompanyName = x.Value }).ToList();

        comboBox1.DataSource = list;
        comboBox1.DisplayMember = "CompanyName";
        comboBox1.ValueMember = "CompanyName";
        comboBox1.SelectedItem = null;

このコードを実行すると、読み込みが非常に速く、comboBoxが空白のままであるように見えるため、正常に機能します。

ただし、コードをステップ実行すると、データソースが「リスト」に割り当てられたときに、SelectedItemとTextの値が変更されることがわかります。

私の実際のLINQクエリはかなり大きいため、読み込みが遅くなります。私のコンボボックスは、テキスト値がクリアされる前に「フラッシュ」します。この醜いフラッシュを削除したいと思います。

DataSource割り当ての前後でSelectedItemとTextの値をnull(または "")に設定するさまざまな組み合わせを試しましたが、"flash"を消すことができません。

どんな提案でも大歓迎です!=)

編集:これは最初のフォームの読み込み時にのみ発生することも追加したいと思います...バインディングソースを変更してから元のコードにリセットすると(まったく同じコードを再度実行すると)、「フラッシュ」されません...これが役立つか、違いを生むかどうかわからない...

4

6 に答える 6

1

データバインディングコードを使用comboBox1.SuspendLayout()してみてください。comboBox1.ResumeLayout()1つ目は、2つ目が呼び出されるまで、更新されないようにする必要があります。

于 2012-11-09T17:06:50.437 に答える
1

もう1つの簡単な提案は、リストの最初の項目として空白のCompanyNameを追加することです。

list.Insert(0, "");
于 2012-11-09T17:09:17.920 に答える
1

comboBox1.DataSourceを設定する前に、最初のリスト要素としてnull参照をリストに追加します。

 var list = test.Select(x => new { CompanyName = x.Value }).ToList();
 list.Insert(0, null);
 comboBox1.DataSource = list;
于 2012-11-09T17:11:06.357 に答える
0

同じ問題が発生しましたが、空のアイテムを追加できなかったため、次のようにしました。

comboBox.ForeColor = comboBox.BackColor;
//set the combobox datasource
comboBox.ForeColor = SystemColors.WindowText;

これにより、空のアイテムを追加せずにデータソースを設定している間、コンボボックスが空白のように見えます。

于 2014-04-12T21:34:42.603 に答える
0

これは私にとってはうまくいきました:バインディングを削除し、データソースを設定した後にそれらを追加し直します:

Binding[] bindings = new Binding[combo.DataBindings.Count];
combo.DataBindings.CopyTo(bindings, 0);
combo.DataBindings.Clear();
combo.DataSource = datasource;
combo.SelectedIndex = -1;
foreach (Binding b in bindings)
{
    combo.DataBindings.Add(b);
}
于 2019-06-14T15:47:56.047 に答える
0

この問題の解決策は、フォームコンストラクターにデータソースを追加し、form_Loadでそれをnullに変更することでした。その後、リストでデータソースを設定すると、コンボボックスのテキストが空白のままになります。

于 2022-01-29T11:32:03.657 に答える