2016-02-17 3 views
0

Я использую System.Windows.Forms.ComboBox, и я получаю какое-то странное неожиданное поведение. В C# я динамически добавляю несколько comboBoxes в свою форму и привязываю их к списку. Единственными полями, которые я устанавливаю, являются DataSource, ValueMember и DisplayMember. По какой-то причине, после привязки к списку, выбирается первый элемент. Я не могу понять, что происходит.combobox автоматически выбирает значение

Мой код выглядит следующим образом:

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

Я просто установил элемент управления Имя, и я добавлю этот элемент управления в элемент layoutedcontrolItem devex, а затем в макет LayoutControlGroup, а затем в devex LayoutControl –

+0

извините, не уверен, что я могу предложить что-нибудь еще. Я попытался добавить элементы управления в flowLayoutPanel, а затем перешел через элементы управления к методу BindCombobox. и даже попытался создать контроль и привязать его перед добавлением в flp. Оба поместили пустые комбобокс с элементами в коллекции предметов без заминки. Это метод method2. Я настрою DS и попробую его таким образом, но я чувствую, что результаты будут одинаковыми. SelectedIndex-1 должен работать. –

ответ

0

Первое значение выбрано, но это поведение по умолчанию, когда вы ничего не меняете в ComboBox cl Настройки попка

Изменить второй метод:

private void BindComboBox(ComboBox sender) 
{ 

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

    sender.SelectedItem = null; 
} 

И это даст вам пустой ComboBox на Form

Это решение работает и я тестировал.

Некоторые помогает ссылки: метод

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

это не работает для меня :(Я не могу понять это! Спасибо за вашу помощь! –

Смежные вопросы