2015-03-13 135 views
1

我有一個WinForms的C#窗體與一些組合框,取消並保存按鈕,工作正常。 我現在需要捕獲用戶輸入文本到組合框中的時間。 我向combbox添加一個空的(現在)lostFocus(或Leave)事件,該事件觸發得很好。但是,如果該事件的原因是取消或保存按鈕按下,則不再觸發相應的事件。如果在其他時間按下這些按鈕仍然可以正常工作。失去焦點事件後按鈕點擊事件沒有觸發

這兩個事件應該順序觸發還是有一些更好的方法來捕獲完整的文本條目?

+2

我說,我有1萬億美元,每個人都會相信我!沒有?...然後親愛的分享代碼,展示你的資產! – Vikrant 2015-03-13 11:40:06

+0

這應該工作得很好 - 請提供您的表單的代碼。 – bokibeg 2015-03-13 11:43:30

+0

表單有700行代碼我不能在這裏發佈它們,如果只是發佈一些我可能會錯過導致問題的位。有沒有調試事件過程的方法? – Lindsey 2015-03-13 12:46:42

回答

0

Leave和/或LoseFocus事件不會被觸發,因爲你不離開組合框,並因爲它,當你按下EnterEscape不失去焦點。

因此最好的辦法是增加你的LoseFocus事件正在引發的功能,也給Cancel-Accept-ButtonsButton點擊事件。

向離開事件本身添加呼叫:comboBox1.Leave(null, null);將是最簡單的方法。

爲了確保該函數被調用一次,我檢查誰中的焦點ButtonClick事件:

private void acceptButton_Click(object sender, EventArgs e) 
{ 
    if (comboBox1.ContainsFocus) comboBox1_Leave(acceptButton, null); 
    // do accept stuff here.. 
} 

private void cancelButton_Click(object sender, EventArgs e) 
{ 
    if (comboBox1.ContainsFocus) comboBox1_Leave(cancelButton, null); 
    // do cancel stuff here.. 
} 

private void comboBox1_Leave(object sender, EventArgs e) 
{ 
    // do leave stuff here.. 
    Console.WriteLine(sender); 
} 

我還通過在Button所以你可以檢查sender看到Leave怎麼回事觸發..

0

我在這裏回答我自己的問題,因爲我覺得它可能對其他新手有用。

我在空的lostFocus事件中設置的斷點是停止按鈕單擊事件發生。當我刪除斷點時,問題就消失了。

但是,當我將代碼添加到lostFocus事件中時,表單重繪有時會移動按鈕並阻止其事件觸發。爲了解決這個問題,我調整了TaWs非常有用的答案,並在lostFocus事件中觸發了按鈕事件。

private void comboBox1_LostFocus(object sender, EventArgs e) 
{ 
    bool saving = btnSave.ContainsFocus; 

    // form redraw stuff here.. 
    if (saving) 
     btnSave_Click(btnSave, null); 
}