Pourquoi ComboBox se cache le curseur quand DroppedDown est réglé?
Créons Application WinForms (j'ai Visual Studio 2008 en cours d'exécution sur Windows Vista, mais il semble que la situation décrite se déroule presque partout à partir de Win98 pour Vista, sur code natif ou géré).
Écrire un tel code:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class Form1 : Form
{
private readonly Button button1 = new Button();
private readonly ComboBox comboBox1 = new ComboBox();
private readonly TextBox textBox1 = new TextBox();
public Form1() {
SuspendLayout();
textBox1.Location = new Point(21, 51);
button1.Location = new Point(146, 49);
button1.Text = "button1";
button1.Click += button1_Click;
comboBox1.Items.AddRange(new[] {"1", "2", "3", "4", "5", "6"});
comboBox1.Location = new Point(21, 93);
AcceptButton = button1;
Controls.AddRange(new Control[] {textBox1, comboBox1, button1});
Text = "Form1";
ResumeLayout(false);
PerformLayout();
}
private void button1_Click(object sender, EventArgs e) {
comboBox1.DroppedDown = true;
}
}
}
Ensuite, exécutez l'application. Placez le curseur de la souris sur la forme et ne pas toucher à la souris plus. Commencez à taper quelque chose dans la zone de texte - curseur se cacher à cause de cela. Lorsque vous appuyez sur la touche Entrée - événement de jette et de la zone de liste déroulante sera tombé. Mais maintenant, le curseur ne s'affiche pas même si vous vous déplacez! Et apparaît uniquement lorsque vous cliquez quelque part.
Il y J'ai trouvé la discussion de ce problème. Mais il n'y a pas de bonne solution...
Toute pensée? 🙂
OriginalL'auteur Ivan Danilov | 2009-07-07
Vous devez vous connecter pour publier un commentaire.
J'ai pu contourner le problème comme ceci:
Si vous êtes touché par ce problème comme je l'ai fait, je vous recommande de vote de la Microsoft connexes rapport de bug. Peut-être un jour ils vont le corriger!
OriginalL'auteur Daniel Stutzbach
J'ai eu ce problème sur une application Delphi. Comme l'a suggéré ici j'ai juste ajouté
SendMessage(ComboBox1.Handle, WM_SETCURSOR, 0, 0)
après une liste Déroulante de l'événement et il a travaillé.OriginalL'auteur Fr0sT
Pour un début, c'est un très obscure de circonstances que je ne peux pas imaginer une interface utile à l'action.
Il semblerait que ce soit un bug qui provoque le programmatique déroulante pour commencer le montage dans la zone de texte qui fait partie de la liste de contrôle de manière efficace le double de cacher le curseur. Pour décomposer...
J'avais soupçonner que chaque masquer les magasins de l'état du curseur et les restaure à la sortie.
La boîte de texte est stocké le réel état de curseur et caché.
La liste déroulante des causes de l'état caché à être stockées et le curseur de la valeur hidden. Lorsque vous déplacez le curseur, il est sans doute le restaurer, mais à l'état caché, elle a sauvé de sorte que le curseur reste caché.
Un clic sur le formulaire semble forcer un reset de cette situation, ne sais pas pourquoi, mais c'est mon 2 penneth valeur.
Si la recherche remplit le combo, que penser de l'utilisation de l'événement keypress à partir de la liste déroulante pour progressivement de recherche et de remplir la liste déroulante à la beaucoup de AJAXified web champs de recherche? c'est à dire d'éliminer la zone de texte et un bouton et de fournir une plus transparente de sortie, vous pouvez limiter la recherche renvoie à la liste aux 50 articles pour éviter une liste déroulante avec 1000s des valeurs ou seulement à la recherche lorsque vous avez 3 ou plus de caractères. Beaucoup de façons d'améliorer l'expérience utilisateur. Sinon, peut-être une zone de liste serait une meilleure solution?
OriginalL'auteur Lazarus
En fait, j'ai été en mesure de résoudre ce problème de cette façon:
Mais ce n'est pas la solution que je veux 🙁
C'est plutôt une béquille, mais pas une solution.
OriginalL'auteur Ivan Danilov
C'est une étrange situation où la zone de liste modifiable est un
DropDownList
type et que vous appelez leDroppedDown
méthode dans la liste déroulante de l'intérieur le code alors qu'il a le focus ou pas.Le curseur disparaît comme si derrière la forme. Si vous cliquez sur le formulaire le curseur revient mais le combo fermeture de la boîte donc pas un bon résultat.
Je peux confirmer que ce code résout le problème sans la fermeture de la zone de liste déroulante.
OriginalL'auteur Kev