在组合框中隐藏下拉列表
本文关键字:隐藏 下拉列表 组合 | 更新日期: 2023-09-27 18:05:11
如何在组合框中隐藏下拉列表?
我想使用ComboBox只显示文本。
这个控件看起来不错,对我来说比文本框加按钮要好。
所以control必须被启用,但是没有任何项。
当用户点击箭头键(或alt + down键)时,下拉列表不应该显示,因为我将选择自定义DataGridView中的值,以便在组合框中填充文本。
编辑。另一种解决方案是将DropDownHeight设置为1,点击控件后只显示1个像素线。
编辑。真正的解决方案。回答下面的
您可以在子类中拦截导致该框下拉的消息。下面的代码片段定义了一个控件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;
}
}
}
通过简单地创建一个带有文本框和按钮的用户控件,以您想要的方式样式,您将有更少的麻烦和创建更好的最终结果。如果您找到了一种方法来删除组合框的功能,那么您实际上所做的就是创建不必要的复杂性。
也许最好创建一个自定义控件,并在需要此功能时使用它。如果你正在使用Windows窗体,也许最简单的方法是继承类UserControl并使用可视化设计器编写少量代码来创建组件。你也可以下降ComboBox类和编码自己的绘图逻辑,但它似乎需要更多的工作。
[Updated]
OK,您不能将组合框设置为只读,但可以设置为Enabled = false
。
我从来没有尝试过,但也许你可以将MaxDropDownItems
设置为0。
但是,您仍然可以将组合框的文本设置为您在代码中想要的值。
[编辑]
另一个想法:设置DropDownHeight
为0(…)如果不接受0,则为1)。
如果DropDownStyle被设置为DropDown并且Text被设置为"Something"那么当用户点击按钮时,ComboBox将不会下拉。
至少,我在WinForms (c# 4.0)中得到了这种行为。这就是你想要达到的目标吗?