Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在组合框中隐藏下拉列表_C#_.net_Winforms_Combobox_Drop Down Menu - Fatal编程技术网

C# 在组合框中隐藏下拉列表

C# 在组合框中隐藏下拉列表,c#,.net,winforms,combobox,drop-down-menu,C#,.net,Winforms,Combobox,Drop Down Menu,如何在组合框中隐藏DropDownList 我只想使用ComboBox来显示文本。这个控件看起来不错,对我来说比TextBox plus按钮好。因此,必须启用控件,但不启用任何项。 当用户单击箭头或alt+向下键时,下拉列表应该不会显示,因为我将从自定义DataGridView中选择值以填充组合框中的文本 编辑。替代解决方案将DropDownHeight设置为1,单击control后仅显示1个像素线 编辑。真正的解决方案。回答如下也许最好创建一次自定义控件,并在需要此功能时随时使用它。 如果您使

如何在组合框中隐藏DropDownList

我只想使用ComboBox来显示文本。这个控件看起来不错,对我来说比TextBox plus按钮好。因此,必须启用控件,但不启用任何项。 当用户单击箭头或alt+向下键时,下拉列表应该不会显示,因为我将从自定义DataGridView中选择值以填充组合框中的文本

编辑。替代解决方案将DropDownHeight设置为1,单击control后仅显示1个像素线


编辑。真正的解决方案。回答如下

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

只需创建一个带有文本框和按钮的用户控件,并按照您想要的方式进行样式设置,就可以减少麻烦并创建更好的最终结果。如果您想办法删除组合框的功能,那么您真正做的就是创建不必要的复杂性。

如果DropDownStyle设置为DropDown,文本设置为某个值,则当用户单击按钮时,组合框不会下拉

至少,我在WinFormsC4.0中得到了这种行为。 这就是你想要达到的目标吗?

[更新]

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

我从未尝试过这个,但也许您可以将MaxDropDownItems设置为0

但是,您仍然可以将组合框的文本设置为代码中所需的值

[编辑]


另一个想法是:将DropDownHeight设置为0…或者如果它不接受0,则设置为1。

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

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;
        }
    }
}

我认为您最好创建一个带有文本框和按钮的用户控件。然后为要显示的文本添加属性,并为单击按钮时添加公共事件。哪个UI框架?WinForms?WPF?ASP.NETWebForms?Silverlight?听起来你需要一个只读文本框。@WraithNath:正如我所说,我可以通过文本框加按钮来完成,但对我来说这不是答案。@Revevice-好的,我知道您不想使用文本框,但使用组合框不容易实现-您必须对控件进行超类处理,并覆盖各种事件,可能还有绘画事件,以停止列表显示,如果可能的话,即使样式是下拉式的,并且设置了文本,drodownlist仍将打开。ComboBox没有只读属性。使用其他技术更新。基本上,你要求的东西不是饼干切割器,所以你必须强迫控件做你需要的。我不能禁用控件。MaxDropDownItems的最小值为1,在本例中不执行任何操作。关于下拉高度,我在我的帖子中写到了替代解决方案。是的!非常感谢。这正是我需要的现在我要简单地将事件添加到控件中,以便处理clik和voilá。F4还打开了combobox下拉列表。@Edwin Groenendaal,很好的解决方案,但是如何重新启用combobox?