的WinForms复选框组合框单一的点击,而不是双击
我使用复选框组合框控件在发现:http://www.codeproject.com/KB/combobox/extending_combobox.aspx,的WinForms复选框组合框单一的点击,而不是双击
,并具有其中的复选框组合框需要两次点击,在第一选择项目的一个问题,但一旦第一点击发生了,它只需要一个。我需要这个盒子只需要一次点击。
有其他人有这个问题,并设法解决它?上面列出的代码项目网站上的另一位用户询问了同样的问题,但没有回答。
感谢
詹姆斯
这听起来像一个焦点问题(首次点击是激活控制所述第二点击正在检查框)。
你尝试下面的解决方案?
/// <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);
}
我不能赞扬代码 - 但评论似乎与我的直觉相吻合 - 它没有得到重点。
谢谢,非常有帮助,有点修补,我得到它的工作 – Jamesbraders
Btw http://www.codeproject.com/KB/combobox/checkedcombobox.aspx是一个更好的控制使用 – Jamesbraders
我有同样的问题,常规复选框,我怎么解决这个问题?史蒂夫的回答似乎更容易实现,但我找不到任何CheckBox.cs(因为我不使用组合框)...我是新的C#,所以我不习惯这一切...... – Colandus
上述解决方案是正确的解决第一个问题,它需要两次点击进入复选框的名单,然而,这引入了一个新的问题,当您单击控件退出它,它保留焦点,你必须加倍点击转到另一个控件。我可以用下面的代码解决这个问题:
在CheckBoxComboBox.cs添加以下重写:
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Parent.Focus();
}
与罗布P.和这个答案的答案,它不会对任何点击保持专注事件。
这听起来像在代码项目代码中的错误,你有没有尝试过调试它? –
我已经看过,但没发现什么明显的,这个问题似乎出现,因为似乎是组合框和复选框的部分,这是需要鼠标点击之间的分离。我正在考虑模拟鼠标点击,但这看起来有点像顶部。 – Jamesbraders