1

System.Windows.Forms.ComboBox を使用していますが、奇妙な予期しない動作が発生しています。C# では、フォームにいくつかのコンボ ボックスを動的に追加し、それらをリストにバインドしています。私が設定している唯一のフィールドは、DataSource、ValueMember、および DisplayMember です。何らかの理由で、リストにバインドした後、最初の項目が選択されます。何が起こっているのかわかりません。

私のコードは次のようになります。

 Control c = new System.Windows.Forms.ComboBox();

すべてのコントロールをループして、

if (c?.GetType() == typeof (ComboBox))
{
    BindComboBox((ComboBox) c);
}


private void BindComboBox(ComboBox sender)
{
    DataTable table = DataGateway.GetTables(1);
    sender.DataSource = table;
    sender.ValueMember = "ID";
    sender.DisplayMember = "Name";

    //sender.SelectedIndex = -1; I tried with this and without this
}   

2番目の方法も試しましたが、同じことが起こっています-

private void BindComboBox(ComboBox sender)
{

    List<string> hiStrings = new List<string>() {"hi", "hello", "whats up"};
    sender.DataSource = hiStrings;

}
4

1 に答える 1

0

ComboBox最初の値が選択されていますが、クラス設定で何も変更しない場合のデフォルトの動作です

2 番目の方法を変更します。

private void BindComboBox(ComboBox sender)
{

    List<string> hiStrings = new List<string>() {"hi", "hello", "whats up"};
    sender.DataSource = hiStrings;

    sender.SelectedItem = null;
}

そして、これはあなたを空ComboBoxにしますForm

このソリューションは機能しており、テストしました。

いくつかのヘルプ リンク:

コンボボックスのテキストを選択解除する方法

試験方法:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void comboBox1_MouseLeave(object sender, EventArgs e)
        {
          var comboBox = sender as ComboBox;

          this.TestMethod(comboBox);
        }

        private void TestMethod(ComboBox d)
        {
            var list = new List<string>() {"hi", "hello", "whats up"};
            d.DataSource = list;
            d.SelectedItem = null;
        }
    }
于 2016-02-17T16:33:54.100 に答える