C# Winforms复选框组合框单击而不是双击

C# Winforms复选框组合框单击而不是双击,c#,winforms,events,combobox,checkbox,C#,Winforms,Events,Combobox,Checkbox,我正在使用位于以下位置的复选框组合框控件: 还有一个问题,复选框组合框需要两次单击来选择一个项目,但是一旦第一次单击,它只需要一次。我需要的框只需要一次点击不管 还有其他人遇到过这个问题并设法解决了吗?上面列出的代码项目站点上的另一个用户也问了同样的问题,但没有回答 谢谢 James听起来像是焦点问题,第一次单击是激活控件,第二次单击是选中复选框 您是否尝试了下面的解决方案 /// <summary> /// Processes Windows messages. /// </

我正在使用位于以下位置的复选框组合框控件:

还有一个问题,复选框组合框需要两次单击来选择一个项目,但是一旦第一次单击,它只需要一次。我需要的框只需要一次点击不管

还有其他人遇到过这个问题并设法解决了吗?上面列出的代码项目站点上的另一个用户也问了同样的问题,但没有回答

谢谢


James

听起来像是焦点问题,第一次单击是激活控件,第二次单击是选中复选框

您是否尝试了下面的解决方案

/// <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);
}

我不能相信代码的正确性-但是评论似乎与我的直觉相符-它没有得到关注。

上述解决方案对于解决第一个问题是正确的,它需要两次单击才能进入复选框列表,但是,当您单击控件退出它时,会引入一个新问题,它保持焦点,您必须双击以转到另一个控件。我可以用以下代码修复此问题:

在CheckBoxComboBox.cs中添加以下覆盖:

    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        this.Parent.Focus();
    }

根据Rob p.的答案和这个答案,它不会关注任何点击事件。

这听起来像是代码项目代码中的一个错误,您试过调试它吗?我查看了一下,但没有发现任何明显的问题,问题似乎出现了,因为组合框和复选框部分之间似乎存在分离,这需要鼠标点击。我正在考虑模拟鼠标点击,但这似乎有点过于夸张。谢谢,经过一点修补非常有帮助,我成功了。顺便说一句,这是一个更好的控件。我对常规复选框也有同样的问题,我是如何解决的?史蒂夫的答案似乎更容易实现,虽然我找不到任何CheckBox.cs,因为我不使用ComboBox。。。我是C新手,所以我不习惯所有这些。。。