【问题标题】:Winforms Checkbox combobox single click instead of double clickWinforms Checkbox 组合框单击而不是双击
【发布时间】:2011-11-20 07:20:12
【问题描述】:

我正在使用位于:http://www.codeproject.com/KB/combobox/extending_combobox.aspx 的 Checkbox 组合框控件,

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

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

谢谢

詹姆斯

【问题讨论】:

  • 这听起来像是代码项目代码中的一个错误,您是否尝试过调试它?
  • 我看过但没有发现任何明显的问题,问题似乎出现了,因为组合框和复选框部分之间似乎存在分离,这需要单击鼠标。我正在考虑模拟鼠标点击,但这似乎有点过头了。

标签: c# winforms events combobox checkbox


【解决方案1】:

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

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

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

根据 Rob P. 的回答和这个回答,它不会将焦点放在任何一个点击事件上。

【讨论】:

    【解决方案2】:

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

    您是否尝试过以下解决方案?

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

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

    【讨论】:

    • 谢谢,对一些修补很有帮助,我搞定了
    • 顺便说一句 codeproject.com/KB/combobox/checkedcombobox.aspx 是一个更好的控制使用
    • 我对常规 CheckBox 有同样的问题,我是如何解决的?史蒂夫的回答似乎更容易实现,虽然我找不到任何 CheckBox.cs(因为我不使用 ComboBox)......我是 C# 新手,所以我不习惯这一切......
    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2021-11-12
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多