2011-09-19 59 views
2

我使用複選框組合框控件在發現:http://www.codeproject.com/KB/combobox/extending_combobox.aspx的WinForms複選框組合框單一的點擊,而不是雙擊

,並具有其中的複選框組合框需要兩次點擊,在第一選擇項目的一個問題,但一旦第一點擊發生了,它只需要一個。我需要這個盒子只需要一次點擊。

有其他人有這個問題,並設法解決它?上面列出的代碼項目網站上的另一位用戶詢問了同樣的問題,但沒有回答。

感謝

詹姆斯

+0

這聽起來像在代碼項目代碼中的錯誤,你有沒有嘗試過調試它? –

+0

我已經看過,但沒發現什麼明顯的,這個問題似乎出現,因爲似乎是組合框和複選框的部分,這是需要鼠標點擊之間的分離。我正在考慮模擬鼠標點擊,但這看起來有點像頂部。 – Jamesbraders

回答

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

我不能讚揚代碼 - 但評論似乎與我的直覺相吻合 - 它沒有得到重點。

+0

謝謝,非常有幫助,有點修補,我得到它的工作 – Jamesbraders

+1

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

+0

我有同樣的問題,常規復選框,我怎麼解決這個問題?史蒂夫的回答似乎更容易實現,但我找不到任何CheckBox.cs(因爲我不使用組合框)...我是新的C#,所以我不習慣這一切...... – Colandus

2

上述解決方案是正確的解決第一個問題,它需要兩次點擊進入複選框的名單,然而,這引入了一個新的問題,當您單擊控件退出它,它保留焦點,你必須加倍點擊轉到另一個控件。我可以用下面的代碼解決這個問題:

在CheckBoxComboBox.cs添加以下重寫:

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

與羅布P.和這個答案的答案,它不會對任何點擊保持專注事件。