Zone de liste déroulante.SelectedValue ne correspond pas du texte affiché lorsque DropDownStyle = DropDownList dans Windows 7

Disons que nous avons le code suivant dans une application Windows:

ComboBox comboBox = new ComboBox()
{
    AutoCompleteMode = AutoCompleteMode.SuggestAppend,
    AutoCompleteSource = AutoCompleteSource.ListItems,
    DataSource = new string[] { "", "Ark", "Boat", "Bucket" },
    DropDownStyle = ComboBoxStyle.DropDownList
};
this.Controls.Add(comboBox);

TextBox textBox = new TextBox()
{
    Left = comboBox.Right,
    Top = comboBox.Top,
    ReadOnly = true
};
textBox.DataBindings.Add("Text", comboBox, "SelectedValue");
this.Controls.Add(textBox);

Pas de magie ici, juste un ComboBox lié à une liste de chaînes de caractères. Le TextBox affiche le SelectedValue de la ComboBox.

Je reçois un comportement inattendu lorsque je tape "Seau" dans le ComboBox et onglet loin. Pour une raison quelconque, le ComboBox affiche "Bateau" mais le TextBox affiche "Seau". Je voudrais attendre à la fois à l'affichage de "Seau".

Il se comporte comme prévu si je change le DropDownStyle à DropDown, mais je ne veux pas que les utilisateurs soient en mesure de taper ce qu'ils veulent. Ils devraient être en mesure de saisir les éléments qui sont dans la liste.

Encore plus intéressant, c'est que, après avoir tapé "Seau" et la tabulation loin, si je tape "Seau" de nouveau, il affichera "Seau" dans les deux. Si je fais une troisième tentative, elle remonte au "Bateau" pour la ComboBox et "Seau" pour la `zone de texte'. Donc il semble que c'est le vélo à travers tous les B.

Je n'avais pas remarqué ce jusqu'à ce que j'ai mis à jour de XP à Windows 7 récemment. Je ne vois pas comment cela pourrait avoir quelque chose à voir avec cela, mais je suis jeter de toute façon.

Si ce comportement est correct, quelqu'un peut me dire ce que je devrais faire pour atteindre mon comportement attendu?

Mise à JOUR il semblerait qu'Il est liés à Windows 7. Tout se comporte comme prévu dans Windows XP Mode. Toute personne qui exécute Windows 7, essayez mon code et vérifier que je ne suis pas fou?

  • J'ai pris votre code exactement qu'il jeta sur une nouvelle forme et ne peut pas reproduire le comportement. Vous pouvez essayer de câbler l'événement SelectedIndexChanged et de jeter quelques messages sur la console et de voir ce qui se passe que vous tapez dans la zone de liste déroulante.
  • J'ai ajouté comboBox.SelectedIndexChanged += new EventHandler(delegate { Console.WriteLine("SelectedIndex = {0}", comboBox.SelectedIndex); }); et la sortie, dit le SelectedIndex changé à "2" et "3", ce qui correspond à ce que l' TextBox montre.
  • Si c'est un bug reproductible, vous devez le soumettre à Microsoft Connecter sur: connect.microsoft.com/VisualStudio
  • J'espérais que quelqu'un d'autre l'exécution de Win7 pourrait confirmer d'abord, mais je suis allé de l'avant et ouvert un bug: connect.microsoft.com/VisualStudio/feedback/....
  • Je l'ai essayé et je peux repro trop (bien que je n'ai pas essayé de voir si il repros sur XP). J'ai upvoted votre Connect bug et déclarée je peux repro il. Cette question peut maintenant être fermé.
InformationsquelleAutor Ecyrb | 2010-01-04