为什么ComboBox在设置DroppedDown时会隐藏光标?

Iva*_*lov 15 c# combobox winforms

让我们创建WinForms应用程序(我在Windows Vista上运行Visual Studio 2008,但似乎所描述的情况几乎发生在从Win98到Vista的所有地方,在本机或托管代码上).

写这样的代码:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,运行应用程序.将鼠标光标放在窗体上,不要再触摸鼠标.开始在TextBox中键入内容 - 光标将因此而隐藏.当您按Enter键 - 事件抛出和ComboBox将被删除.但是现在光标即使移动也不会出现!并且仅在您单击某处时出现.

在那里,我发现了对这个问题的讨论.但是没有好的解决方案......

有什么想法吗?:)

Dan*_*ach 33

我能够像这样解决这个问题:

comboBox1.DroppedDown = true;
Cursor.Current = Cursors.Default;
Run Code Online (Sandbox Code Playgroud)

如果你像我一样受到这个问题的影响,我建议投票相关的微软错误报告.也许有一天他们会解决它!


Fr0*_*0sT 5

我在Delphi应用程序上遇到了这个问题。正如这里所建议的我只是SendMessage(ComboBox1.Handle, WM_SETCURSOR, 0, 0)在任何DropDown事件之后添加了它,并且起作用了。