Я создаю динамическое поле со списком и добавляю к форме. Я пытаюсь заполнить поле со списком с помощью 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 в случае Form.Shown. Помните, что это динамический элемент управления, а не элемент управления уже в форме. Я думаю, здесь проблема. – ScottN
@ScottN Не знаете, почему вы настаиваете на том, чтобы делать их в одной и той же функции, но вы также можете попробовать создать ComboBox на событии Shown. –
Извините, если я создаю свое управление в форме Load, а затем в форме Shown try чтобы установить поле со списком в правильный выбранный индекс, элементы теперь заполнены, я надеялся сделать это в той же функции. Думаю, это невозможно. – ScottN