2010-10-21 12 views
1

Je crée une zone de liste modifiable dynamique et l'ajoute à un formulaire. J'essaie de remplir la zone de liste déroulante avec un DataSource à partir d'un ArrayList, puis en sélectionnant un élément dans la zone de liste déroulante basée sur une valeur d'une propriété.Dynamic ComboBox Datasource Form Load

Le problème est que les éléments de la zone de liste déroulante ne sont pas liés tant que l'événement Form_Load n'est pas terminé et que le formulaire est visible. Donc, la zone de liste déroulante est vide lorsque j'essaie de définir l'index sélectionné de la zone de liste déroulante. Voir le code pour ce que je fais en détail, et reportez-vous aux commentaires dans le code:

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) 

Comment choisir le bon index sélectionné pour zone de liste déroulante sans un hack (minuterie de charge ou quelque chose de stupide comme ça)?

Répondre

0
+0

Merci pour votre réponse, mais les éléments de la zone de liste sont toujours 0 en cas Form.Shown. Rappelez-vous que c'est un contrôle dynamique, pas un contrôle déjà sur le formulaire. Ce qui je pense est le problème ici. – ScottN

+0

@ScottN Vous ne savez pas pourquoi vous insistez pour les faire dans la même fonction, mais vous pouvez également essayer de créer la ComboBox sur l'événement affiché –

+0

Désolé, si je fais la création de mon contrôle dans le chargement du formulaire, puis dans le formulaire montré pour définir la zone de liste déroulante à l'index sélectionné correct les éléments sont maintenant remplis, j'espérais faire cela dans la même fonction. Je suppose que ce n'est pas possible. – ScottN