的WinForms复选框组合框单一的点击,而不是双击

问题描述:

我使用复选框组合框控件在发现:http://www.codeproject.com/KB/combobox/extending_combobox.aspx的WinForms复选框组合框单一的点击,而不是双击

,并具有其中的复选框组合框需要两次点击,在第一选择项目的一个问题,但一旦第一点击发生了,它只需要一个。我需要这个盒子只需要一次点击。

有其他人有这个问题,并设法解决它?上面列出的代码项目网站上的另一位用户询问了同样的问题,但没有回答。

感谢

詹姆斯

+0

这听起来像在代码项目代码中的错误,你有没有尝试过调试它? –

+0

我已经看过,但没发现什么明显的,这个问题似乎出现,因为似乎是组合框和复选框的部分,这是需要鼠标点击之间的分离。我正在考虑模拟鼠标点击,但这看起来有点像顶部。 – Jamesbraders

这听起来像一个焦点问题(首次点击是激活控制所述第二点击正在检查框)。

你尝试下面的解决方案?

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

我不能赞扬代码 - 但评论似乎与我的直觉相吻合 - 它没有得到重点。

+0

谢谢,非常有帮助,有点修补,我得到它的工作 – Jamesbraders

+1

Btw http://www.codeproject.com/KB/combobox/checkedcombobox.aspx是一个更好的控制使用 – Jamesbraders

+0

我有同样的问题,常规复选框,我怎么解决这个问题?史蒂夫的回答似乎更容易实现,但我找不到任何CheckBox.cs(因为我不使用组合框)...我是新的C#,所以我不习惯这一切...... – Colandus

上述解决方案是正确的解决第一个问题,它需要两次点击进入复选框的名单,然而,这引入了一个新的问题,当您单击控件退出它,它保留焦点,你必须加倍点击转到另一个控件。我可以用下面的代码解决这个问题:

在CheckBoxComboBox.cs添加以下重写:

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

与罗布P.和这个答案的答案,它不会对任何点击保持专注事件。