Warum ComboBox verbirgt cursor, wenn DroppedDown eingestellt ist?
Erstellen wir WinForms-Anwendung (ich habe Visual Studio 2008 unter Windows Vista, aber es scheint, dass die beschriebene situation findet sich fast überall, von Win98 bis Vista, auf systemeigenem oder verwaltetem code).
Schreiben, wie 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;
}
}
}
Führen Sie dann die app. Platzieren Sie die Maus-cursor auf die form und nicht-touch-Maus. Geben Sie etwas in das Textfeld - cursor wird ausgeblendet, weil es. Wenn Sie die Enter-Taste drücken - Ereignis wirft und ComboBox gelöscht werden, nach unten. Aber jetzt cursor wird nicht angezeigt, auch wenn Sie es verschieben! Und wird nur angezeigt, wenn Sie klicken Sie irgendwo.
Dort Ich gefunden habe, die Diskussion über dieses problem. Aber es gibt keine gute Lösung...
Irgendwelche Gedanken? 🙂
InformationsquelleAutor Ivan Danilov | 2009-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage zu arbeiten, um das problem so:
Wenn Sie getroffen werden, die von diesem Problem haben wie ich, empfehle ich die Abstimmung bis die Verwandte Microsoft-bug-report. Vielleicht eines Tages Sie ' ll fix it!
InformationsquelleAutor Daniel Stutzbach
Ich habe dieses Problem auf einer Delphi-Applikation. Wie vorgeschlagen hier habe ich nur noch
SendMessage(ComboBox1.Handle, WM_SETCURSOR, 0, 0)
nach jedem DropDown-Ereignis und es hat funktioniert.InformationsquelleAutor Fr0sT
Für einen start, es ist ein sehr obskuren Umstände, dass ich mir nicht vorstellen kann, eine nützliche Schnittstelle handeln.
Es scheint ein Fehler zu sein, dass die programmatischen dropdown-Liste beginnen Sie mit der Bearbeitung in das Textfeld ein, die einen Teil des dropdown-Steuerung so effektiv verdoppeln ausblenden des Cursors. Um es zu brechen...
Ich würde vermuten, dass jeder verstecken speichert den Zustand des Cursors und stellt es auf die Ausfahrt.
Textfeld gespeichert hat, die eigentliche cursor-Status und versteckte es.
Dem dropdown-bewirkt, dass die ausgeblendeten Zustand gespeichert und der cursor ausgeblendet. Wenn Sie den cursor bewegen, ist es wahrscheinlich nicht wiederherstellen, aber um die ausgeblendeten Zustand gespeichert, so bleibt der cursor ausgeblendet.
Einem Klick auf die form scheint zu zwingen einen reset, die situation, nicht sicher, warum, aber das ist meine 2 penneth Wert.
Wenn die Suche füllt die combo, was über die Verwendung von keypress-Ereignis aus der combo schrittweise Suche und füllen Sie die dropdown-la-viel AJAXified web-search-Boxen? also beseitigen Sie die textbox und button und geben Sie eine nahtlose Ausgang, könnte man die Suche einschränken return Liste auf 50 Stück zu vermeiden, eine dropdown-Liste mit 1000 Werten oder nur die Suche, wenn du 3 oder mehr Zeichen. Viele Möglichkeiten, um die Benutzerfreundlichkeit zu verbessern. Ansonsten vielleicht eine listbox wäre die bessere Lösung?
InformationsquelleAutor Lazarus
In der Tat war ich in der Lage, dieses Problem zu beheben, in dieser Weise:
Aber es ist nicht die Lösung die ich will 🙁
Es ist eher eine Krücke, aber keine Lösung.
InformationsquelleAutor Ivan Danilov
Es ist eine merkwürdige Reihe von Umständen, wo die combo-box ist ein
DropDownList
geben und rufen Sie dieDroppedDown
Methode, die auf der combo-box aus, die im code entweder während es den Fokus hat oder nicht.Verschwindet der cursor, als ob hinter der form. Wenn Sie klicken Sie auf die form der cursor geht zurück, aber die combo-box schließt so nicht zu einem guten Ergebnis.
Kann ich bestätigen, dass dieser code das Problem behebt, ohne schließen der Liste des Kombinationsfeldes.
InformationsquelleAutor Kev