如何在ComboBox中隐藏DropDownList?
我想只使用ComboBox来显示文字。
这个控件看起来不错,对我来说比TextBox加Button更好。
所以必须启用控制,但没有任何项目。
当用户单击箭头(或alt +向下键)时,DropDownList应该不显示,因为自定义DataGridView中的选择值是为了填充ComboBox中的文本。
修改。替代解决方案是将DropDownHeight设置为1,单击控件后仅显示1像素行。
修改。真正的解决方答案如下
答案 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)。