none
Combobox: déselectionner le texte affiché RRS feed

  • Question

  • Langage: VB.Net 2008
    Système: Windows 7

    Dans un formulaire Windows, j'ai un Control Combobox avec plusieurs entrées.
    Lorsque l'utilisateur choisit une nouvelle entrée, le texte choisi apparaît sélectionné dans la zone d'affichage du Combobox. Or, je voudrais qu'il ne le soit pas.

    Bien sûr, il est facile de dé-sélectionner le texte en cliquant dans la zone d'affichage du Control.
    Mais comment obtient-on le même résultat par programmation ?

    J'ai essayé les méthodes .SelectionStart et .SelectionLength, et aussi .Select(n1, n2), mais rien n'y fait: le texte apparaît toujours sélectionné.

    Une solutions, quelqu'un ?
    Merci   
    jeudi 11 juin 2009 13:48

Réponses

  • Bonjour,

    J'ai fait un test en donnant le focus sur un autre controle ça a bien fonctionner ...
    j'ai essayé la propriété Select et effectivement ça fonctionne pas (on l'utilise certainement mal ? je sais pas)

    j'ai quand même trouvé une solution de contournement mais pas super super

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Timer1.Enabled = True
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            ComboBox1.Select(0, 0)
            If ComboBox1.SelectedText = "" Then
                Timer1.Enabled = False
    
            End If
        End Sub
    Il semble quand même qu'il n'existe pas de solution plus directe


    Cordialement, Troxsa
    • Marqué comme réponse Blue-G samedi 13 juin 2009 05:40
    vendredi 12 juin 2009 09:07
    Auteur de réponse

Toutes les réponses


  • Bonjour,

    Le fait de donner le focus sur un autre composant cela est il possible ?
    par exemple :
    Dans l'evenement ComboBox1.SelectedIndexChanged
    Textbox1.focus


    Ou alors il y a la propriété DropDownList
    C'est tout ce que j'ai trouvé pour l'instant :)

    .
    Cordialement, Troxsa
    jeudi 11 juin 2009 15:11
    Auteur de réponse
  • Changer le focus ne donne rien. De toute façon, le problème reviendrait à sont de départ dès que le focus serait remis sur l'objet... (;>)
    Quant à l'évènenement DropDownClosed, Windows le renvoie AVANT que le nouveau texte n'apparaisse sélectionné dans la zone d'affichage du ComboBox. Donc inutile aussi.

    Merci pour l'effort.

    La fonction idéale pour cette occasion serait Select(début, combien), mais elle ne produit aucun résultat.
    Pourquoi le texte se déselectionne-t-il quand on clique dans la zone d'affichage ? Parce que le point d'insertion est déplacé à l'endroit du clic.
    La solution apparaît donc évidente: déplaçons programmatiquement le point d'insertion !
    Or, aucune fonction liée au point d'insertion ne produit de résultat dans un ComboBox.

    Bug ? 
     
        
    jeudi 11 juin 2009 23:00
  • Bonjour,

    J'ai fait un test en donnant le focus sur un autre controle ça a bien fonctionner ...
    j'ai essayé la propriété Select et effectivement ça fonctionne pas (on l'utilise certainement mal ? je sais pas)

    j'ai quand même trouvé une solution de contournement mais pas super super

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Timer1.Enabled = True
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            ComboBox1.Select(0, 0)
            If ComboBox1.SelectedText = "" Then
                Timer1.Enabled = False
    
            End If
        End Sub
    Il semble quand même qu'il n'existe pas de solution plus directe


    Cordialement, Troxsa
    • Marqué comme réponse Blue-G samedi 13 juin 2009 05:40
    vendredi 12 juin 2009 09:07
    Auteur de réponse
  • Merci Troxsa.

    Je vais regarder de près ce que tu proposes comme solution de contournement.
    L'astuce, complètement inattendue, m'intrigue et vaut la peine d'être explorée...

    Puisque tu me dis avoir vérifié que transférer le focus à un autre Control t'a apporté le résultat escompté, je vais tenter le coup de nouveau. Peut-être que je m'y suis pris comme un manche quand j'ai exploré cette piste (ce ne serait pas la première fois!! )

    Merci pour le coup de main. C'est vraiment très aimable.

    BlueZ

    PS: tu utilises quel VB ? Et sous quel système ?

    samedi 13 juin 2009 03:45
  • Re-salut Troxsa.

    Oui, tu as parfaitement raison: déplacer le focus sur un Control différent donne exactement le résultat que je recherchais. Parfit ! Je m'y étais vraiment mal pris la première fois.

    En plus, ton astuce surprenante fonctionne très bien. Comment une solution pareille t'est-elle venue à l'esprit ? (;>))

    Gros Merci.

    samedi 13 juin 2009 05:40
  • Blue-G


    Pour répondre a la première question :
    Je suis sous Windows Vista, Windows XP, et server 2003 (chez moi et ou au travail) avec Visual Studio 2008

    Et pour la deuxième question :
    Je sais pas ! :P, j'ai testé directement faire un select dans l'événement SelectedIndexChanged et a ma surprise j'ai vu que cela ne fonctionnais pas, j'ai pas trop rechercher le pourquoi du comment. Alors j'ai essayé de metre le Select dans un bouton pour voir le comportement et là encore une surprise, ça fonctionne.
    et a ma suposition c'est une histoire de delais, quand le SelectedIndexChanged est fait il n'a pas fini de faire son select alors que SelectedIndexChanged est toujours en cours bref c'est un truc dans ce genre la :) d'ou l'astuce du timer !

    A bientot

    Cordialement, Troxsa
    samedi 13 juin 2009 08:30
    Auteur de réponse
  • Oui, de toute évidence, c'est un problème d'enchaînement d'évènements (ordonnancement). Ils ne sont pas faciles à dépatouiller, ceux-là.

    Mais encore fallait-il penser à intercaler un Timer dans la chaîne pour y voir clair...
    En tout cas, je retiens l'idée.

    D'autant plus que tu m'as permis de découvrir à quel point il est facile d'utiliser un Timer en VB.Net. J'entrevois plein de situations où ça pourra ou bien dépanner, ou bien contribuer au passage du concept au code! Ah! Si mon ordinateur savait penser...

    Bravo et merci.
    samedi 13 juin 2009 16:12