如何正确初始化ComboBox?

How to make correct initialization of ComboBox?

我需要在启动程序后显示下拉组合框。 我只需要下拉样式,而不是简单样式。

这是我程序的简单片段:

private void Form1_Shown(object sender, EventArgs e)
{
            CB1.Items.Add("1");
            CB1.DropDownStyle = ComboBoxStyle.DropDown;
            CB1.DroppedDown = true;
}
 

但是直到我在任何地方点击表格,我才发现手表标志是光标。 我猜我的表单还没有完全激活状态,正在等待一些东西。

当我通过 LBM 单击表单(或组合框或任何控件)时,它完全激活并且一切正常。

当然组合框是下拉的,所以我需要点击组合框两次。 请告诉我什么是没有“Cursor = Cursors.Default;”

的这种样式组合框的正确初始化

您只需等到光标成为默认值即可:

while (Cursor.Current != Cursors.Default)
{
    Application.DoEvents();
}

CB1.Items.Add("1");
CB1.DropDownStyle = ComboBoxStyle.DropDown;
CB1.DroppedDown = true;

Application.DoEvents 只是处理来自 window 队列的消息,因此您可以处理消息,直到您获得默认游标。在那一刻,你可以毫无问题地放下你的控制。

如果您愿意,可以为表单创建一个扩展方法:

public static class FormExtends
{
    public static void WaitToDefaultCursor(this Form form)
    {
        while (Cursor.Current != Cursors.Default)
        {
            Application.DoEvents();
        }
    }
}

并使用它:

this.WaitToDefaultCursor();

CB1.Items.Add("1");
CB1.DropDownStyle = ComboBoxStyle.DropDown;
CB1.DroppedDown = true;

注意:我使用 Cursor.Default 但不是为了更改光标。表单正在处理消息,很难 select 放下控件的好时机。