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