在ComboBox中隐藏DropDownList

时间:2011-08-10 13:01:24

标签: c# .net winforms combobox drop-down-menu

如何在ComboBox中隐藏DropDownList?

我想只使用ComboBox来显示文字。
这个控件看起来不错,对我来说比TextBox加Button更好。
所以必须启用控制,但没有任何项目。
当用户单击箭头(或alt +向下键)时,DropDownList应该不显示,因为自定义DataGridView中的选择值是为了填充ComboBox中的文本。

修改。替代解决方案是将DropDownHeight设置为1,单击控件后仅显示1像素行。

修改。真正的解决方答案如下

5 个答案:

答案 0 :(得分:5)

您可以在子类中拦截导致框下拉的消息。以下代码段定义了一个控件NoDropDownBox,它忽略了导致组合框下拉的鼠标点击:

public class NoDropDownBox : ComboBox
{
    public override bool PreProcessMessage(ref Message msg)
    {
        int WM_SYSKEYDOWN = 0x104;

        bool handled = false;

        if (msg.Msg == WM_SYSKEYDOWN)
        {
            Keys keyCode = (Keys)msg.WParam & Keys.KeyCode;

            switch (keyCode)
            {
                case Keys.Down:
                    handled = true;
                    break;
            }
        }

        if(false==handled)
            handled = base.PreProcessMessage(ref msg);

        return handled;
    }

    protected override void WndProc(ref Message m)
    {            
        switch(m.Msg)
        {
            case 0x201:
            case 0x203:
                break;

            default:
                base.WndProc(ref m);
                break;
        }
    }
}

答案 1 :(得分:3)

通过简单地创建一个带有文本框和按钮的用户控件,您可以减少麻烦并创建更好的最终结果。如果您想办法删除组合框的功能,那么您所做的只是创建不必要的复杂性。

答案 2 :(得分:1)

也许最好一次创建一个自定义控件,并在需要此功能时使用它。 如果您正在使用Windows Forms,最简单的方法是继承类UserControl并使用可视化设计器编写一些代码来创建组件。您也可以下载ComboBox类并编写自己的绘图逻辑,但似乎需要更多的工作。

答案 3 :(得分:0)

如果 DropDownStyle 设置为 DropDown Text 设置为“ Something ”,那么<当用户点击按钮时,strong> ComboBox 不会下拉。

至少,我在WinForms(C#4.0)中获得了这种行为。 那是你想要实现的目标吗?

答案 4 :(得分:0)

<强> [更新]

好的,您无法将组合框设置为只读,但您可以设置Enabled = false

我从来没有试过这个,但也许你可以将MaxDropDownItems设置为0。

但是,你仍然会将组合框的文本设置为你想要的代码值。

<强> [编辑]

另一个想法:将DropDownHeight设置为0(如果不接受0,则为1或1)。