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

标签 c# winforms .net-2.0 combobox

在 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/

相关文章:

c# - 如何使用 C#.Net 从 .CAB 文件中提取文件?

.net - IAsyncResult 模式的优势是什么?

c# - AES 加密错误 : Padding is invalid and cannot be removed

C# 从 HTTPS URL 中获取服务器证书抛出 System.PlatformNotSupportedException 异常

c# - 理解 Dictionary 类中的 TKey 和 TValue 参数

c# - 我必须做什么才能访问我自己的公共(public)方法?

c# - ErrorProvider 不显示错误信息

c# - 打印 C# Web 服务的 SOAP 请求和响应

javascript - 如何处理 asp.net Httphandler 中的错误?

vb.net - My.Computer.Audio.Play VB.NET是否有超过3个重载