我使用的是Checkbox组合框控件:http://www.codeproject.com/KB/combobox/extending_combobox.aspx,
并且有一个问题,复选框组合框首先需要两次点击才能选择一个项目,但是一旦发生第一次点击,它只需要一个。我需要这个盒子,无论如何只需要一次点击。
还有其他人遇到过这个问题并设法解决了吗?上面列出的代码项目网站上的另一个用户也提出了同样的问题,但没有回答。
由于
詹姆斯
答案 0 :(得分:2)
上述解决方案是正确的,以解决第一个问题,它需要两次单击才能进入复选框列表,但是,当您单击控件退出它时,这会引入一个新问题,它会保留焦点,您必须双击去另一个控制。我能用以下代码解决这个问题:
在CheckBoxComboBox.cs中添加以下覆盖:
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Parent.Focus();
}
根据Rob P.的回答和这个答案,它不会关注任何点击事件。
答案 1 :(得分:1)
这听起来像一个焦点问题(第一次点击是激活控件,第二次点击是选中框)。
您是否尝试过以下解决方案?
/// <summary>
/// Processes Windows messages.
/// </summary>
/// <param name="m">The Windows <see cref="T:System.Windows.Forms.Message" /> to process.</param>
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m) {
if (m.Msg == (NativeMethods.WM_COMMAND + NativeMethods.WM_REFLECT) && NativeMethods.HIWORD(m.WParam) == NativeMethods.CBN_DROPDOWN) {
// Wout: changed this to use BeginInvoke instead of calling ShowDropDown directly.
// When calling directly, the Control doesn't receive focus.
BeginInvoke(new MethodInvoker(ShowDropDown));
return;
}
base.WndProc(ref m);
}
我不能赞同代码 - 但评论似乎与我的直觉相符 - 它没有得到关注。