Winforms Checkbox组合框单击而不是双击

时间:2011-09-19 14:19:42

标签: c# winforms events combobox checkbox

我使用的是Checkbox组合框控件:http://www.codeproject.com/KB/combobox/extending_combobox.aspx

并且有一个问题,复选框组合框首先需要两次点击才能选择一个项目,但是一旦发生第一次点击,它只需要一个。我需要这个盒子,无论如何只需要一次点击。

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

由于

詹姆斯

2 个答案:

答案 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);
}

我不能赞同代码 - 但评论似乎与我的直觉相符 - 它没有得到关注。