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
}   

我也尝试了第二种方法,但同样的事情正在发生 -

private void BindComboBox(ComboBox sender)
{

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

}
4

1 回答 1

0

第一个值被选中,但当你在ComboBox类设置中没有任何变化时是默认行为

修改第二种方法:

private void BindComboBox(ComboBox sender)
{

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

    sender.SelectedItem = null;
}

And this give You empty ComboBoxonForm

该解决方案有效,我进行了测试。

一些帮助链接:

如何取消选择组合框的文本

测试方法:

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 回答