我使用複選框組合框控件在發現:http://www.codeproject.com/KB/combobox/extending_combobox.aspx,的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