winforms组合框,如何在获得焦点时阻止它下降
winforms combobox, how to stop it from dropping down when getting focus
我在 winform 上有一个组合框,dropdownstyle 设置为 DropDownList。
当用户单击组合框上的任意位置时,其下拉列表将打开。
如果我使用任何其他下拉样式(DropDown 或 Simple),则情况并非如此,只有当用户单击右侧的箭头时,组合框才会打开。
我需要的是一个将 dropdownstyle 设置为 DropDownList 的组合框,但仍然只在单击右侧箭头时打开其下拉列表,而不是在单击组合框上的其他任何地方时打开,就像 dropdownstyle 为 DropDown 时一样或简单。
如果您想知道我为什么要这个,我将 DrawMode 设置为 OwnerDrawFixed 并在 DrawItem 中绘制组合框,这样它看起来很正常,而不是这种下拉样式强加给我的丑陋 3d。所以我实际上有一个只读组合框,但没有丑陋的 3d 外观。
如果需要,我可以 post 来自 DrawItem 的代码,但此代码对此行为没有任何影响,因为没有 drawitem 代码,组合框的反应完全相同。
我希望这个问题足够清楚。
我的好朋友Google救了我,这段代码似乎解决了我的问题:
const int WM_LBUTTONDOWN = 0x0201;
const int WM_LBUTTONDBLCLK = 0x0203;
protected override void WndProc(ref Message m)
{
// only open dropdownlist when the user clicks on the arrow on the right, not anywhere else...
if (m.Msg == WM_LBUTTONDOWN || m.Msg == 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);
}
我在 winform 上有一个组合框,dropdownstyle 设置为 DropDownList。
当用户单击组合框上的任意位置时,其下拉列表将打开。 如果我使用任何其他下拉样式(DropDown 或 Simple),则情况并非如此,只有当用户单击右侧的箭头时,组合框才会打开。
我需要的是一个将 dropdownstyle 设置为 DropDownList 的组合框,但仍然只在单击右侧箭头时打开其下拉列表,而不是在单击组合框上的其他任何地方时打开,就像 dropdownstyle 为 DropDown 时一样或简单。
如果您想知道我为什么要这个,我将 DrawMode 设置为 OwnerDrawFixed 并在 DrawItem 中绘制组合框,这样它看起来很正常,而不是这种下拉样式强加给我的丑陋 3d。所以我实际上有一个只读组合框,但没有丑陋的 3d 外观。
如果需要,我可以 post 来自 DrawItem 的代码,但此代码对此行为没有任何影响,因为没有 drawitem 代码,组合框的反应完全相同。
我希望这个问题足够清楚。
我的好朋友Google救了我,这段代码似乎解决了我的问题:
const int WM_LBUTTONDOWN = 0x0201;
const int WM_LBUTTONDBLCLK = 0x0203;
protected override void WndProc(ref Message m)
{
// only open dropdownlist when the user clicks on the arrow on the right, not anywhere else...
if (m.Msg == WM_LBUTTONDOWN || m.Msg == 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);
}