2009-12-17 6 views
2

Je souhaite développer automatiquement la zone de liste déroulante lors d'un événement de mise au point. J'ai défini le Droppeddown = True dans l'événement gotfocus, mais cela a un effet secondaire. Lorsque l'événement click est déclenché, il étend la liste déroulante et se ferme immédiatement. Comment puis-je l'éviter?Comment développer une zone de liste déroulante lors d'un événement de mise au point?

est ici Code:

Private Sub cmbElectLoadPS_gotfocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbElectLoadPS.GotFocus 
     cmbElectLoadPS.DroppedDown = True 
End Sub 
+0

ajouter un retour false –

+0

pourriez-vous poster du code –

Répondre

4

Qu'en est-il de vérifier si déjà DroppedDown?

Private Sub cmbElectLoadPS_gotfocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbElectLoadPS.GotFocus 
     if Not cmbElectLoadPS.DroppedDown Then 
      cmbElectLoadPS.DroppedDown = True 
     End If 
End Sub 

Si u besoin de ce comportement pour tous vos contrôles de combo est préférable de créer votre propre implémentation

Pulic Class CustomComboBox 
    Inherits ComboBox 

    Protected Overrides Sub OnEnter(ByVal e As System.EventArgs) 
      if Not DroppedDown Then 
       DroppedDown = True 
      End If 
    End Sub 

End Class 
0

Oh .. ajouter la même valeur à ComboBox sur MouseUp .. il ferait l'affaire pour u :) sthing comme:

private void comboBox1_Enter(object sender, EventArgs e) 
    { 

     comboBox1.DroppedDown = true; 
    } 

    private void comboBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     comboBox1.DroppedDown = true; 
    } 

Pas votre meilleure solution .. mais il ferait l'affaire :)

+0

Son fonctionnement, mais comme vous l'avez dit, pas le meilleur soln car il montre deux fois. Y a-t-il une meilleure façon? – Myth

0

Créer une minuterie appelé tmrDropDown (vous devez créer une minuterie pour chaque ComboBox) et laisser sa valeur par défaut Propriétés. Ajoutez ce code:

Private Sub cmbBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbBox.GotFocus 
    tmrDropDown.Enabled = True 
End Sub 

Et

Private Sub tmrDropDown_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrDropDown.Tick 
    cmbBox.DroppedDown = True 
    tmrDropDown.Enabled = False 
End Sub 
0

Pour mettre en œuvre cette fonctionnalité pour plusieurs contrôles ComboBox, plutôt que héritant de la combobox comme un nouveau contrôle personnalisé, je vous propose cette solution simple:

Private Sub AutoDropDownCombobox_Enter(sender As Object, e As EventArgs) Handles _ 
    cboControl1.Enter, cboControl2.Enter ' register additional events here 
    If Not CType(sender, ComboBox).DroppedDown Then 
     CType(sender, ComboBox).DroppedDown = True 
    End If 
End Sub 
Questions connexes