2016-02-17 391 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

這不適用於我:(我無法弄清楚這一點!感謝您的幫助! –

相關問題