在C#.NET 2.0中,我具有带有ComboBoxStyle DropDownList的WinForms ComboBox。但是,每当用户单击组合框上的任意位置时,都会显示下拉列表。相反,我只想在用户显式单击下拉按钮时将其打开。当用户单击组合框的其余部分时,我只想为其分配键盘焦点,以便他(她)可以在所选项目上使用一些键盘命令。最好的方法是什么?

最佳答案

在获得其他答案的帮助后,我得出了以下快速解决方案:

public class MyComboBox : ComboBox
{
    public MyComboBox()
    {
        FlatStyle = FlatStyle.Popup;
        DropDownStyle = ComboBoxStyle.DropDownList;
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0201 /* WM_LBUTTONDOWN */ || m.Msg == 0x0203 /* WM_LBUTTONDBLCLK */)
        {
            int x = m.LParam.ToInt32() & 0xFFFF;
            if (x >= Width - SystemInformation.VerticalScrollBarWidth)
                base.WndProc(ref m);
            else
            {
                Focus();
                Invalidate();
            }
        }
        else
            base.WndProc(ref m);
    }
}

关于c# - 如何强制DropDownList样式的ComboBox仅在用户单击下拉按钮时打开?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1043661/

10-12 12:44
查看更多