2010-10-21 5 views
1

Я создаю динамическое поле со списком и добавляю к форме. Я пытаюсь заполнить поле со списком с помощью DataSource из ArrayList и затем выбрать элемент в поле со списком, исходя из значения из свойства.Dynamic ComboBox Datasource Form Load

Проблема в том, что элементы со списком не привязаны до тех пор, пока событие Form_Load не завершится, и форма видна. Поэтому поле со списком пуст, когда я пытаюсь установить выбранный индекс в поле со списком. Смотрите код для того, что я делаю в деталях, и обратитесь к комментариям в коде:

Dim cboValues As New ComboBox 
cboValues.Width = fieldControlWidth 
cboValues.DropDownStyle = ComboBoxStyle.DropDownList 

cboValues.Name = "cboResult" 

For Each d As SystemTaskResult In [Enum].GetValues(GetType(SystemTaskResult)) 
    Dim cv As New ComboBoxDisplayValue(d.ToString, d) 
    arrValues.Add(cv) 
Next 

cboValues.DataSource = arrValues 
cboValues.DisplayMember = "Display" 
cboValues.ValueMember = "Value" 

Dim val As SystemTaskResult = DirectCast(p.GetValue(Me.Task, Nothing), SystemTaskResult) 

'Was trying to get this to work, but commented out to try the below 
'cboValues.SelectedIndex = cboValues.Items.IndexOf(New ComboBoxDisplayValue(val.ToString, val)) 

'Then this doesn't work because the combo box hasn't updated it's DataSource yet, which is probably the reason for the above not working as well. 
For i = 0 To cboValues.Items.Count - 1 
    cboValues.SelectedIndex = i 
    If cboValues.SelectedValue = val Then 
     Exit For 
    End If 
Next 

holdPanel.Controls.Add(cboValues) 

Как правильно выбрать выбранный индекс для комбинированного окна без хака (таймер нагрузки или что-то глупое подобное)?

ответ

0
+0

спасибо за ваш ответ, но элементы поля со списком еще 0 в случае Form.Shown. Помните, что это динамический элемент управления, а не элемент управления уже в форме. Я думаю, здесь проблема. – ScottN

+0

@ScottN Не знаете, почему вы настаиваете на том, чтобы делать их в одной и той же функции, но вы также можете попробовать создать ComboBox на событии Shown. –

+0

Извините, если я создаю свое управление в форме Load, а затем в форме Shown try чтобы установить поле со списком в правильный выбранный индекс, элементы теперь заполнены, я надеялся сделать это в той же функции. Думаю, это невозможно. – ScottN