2016-02-17 204 views
0

我使用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; 

} 
+0

当我设置'sender.SelectedIndex = -1'我得到了3空白的组合框,我不能复制这个行为下拉列表中的值。在循环之后,你是否在做一些事情? –

+0

我只是设置了控件名称,然后将此控件添加到devex layoutcontrolItem,然后添加到devex LayoutControlGroup,然后添加到devex LayoutControl –

+0

抱歉,我不确定我可以提供其他任何东西。我尝试将控件添加到flowLayoutPanel,然后通过控件循环到BindCombobox方法。甚至尝试在添加到flp之前创建控件并进行绑定。两个项目集合中的物品均未放置在空白组合框中。这是使用method2。我会建立一个DS并尝试这种方式,但我认为结果将是相同的。 SelectedIndex-1应该可以工作。 –

回答

0

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

修改第二种方法:

​​

这给你空ComboBoxForm

此解决方案的工作和我的测试。

一些帮助链接:

How to deselect the text of a combobox

测试方法:

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; 
     } 
    } 
+0

这不适用于我:(我无法弄清楚这一点!感谢您的帮助! –

相关问题