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