如何强制DropDownList样式ComboBox仅在用户单击下拉按钮时打开?

Eri*_*ric 5 c# combobox .net-2.0 winforms

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

Eri*_*ric 4

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

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