關於ComboBox的控件事件CBN_SELCHANGE老是取到舊值的問題

我發現複選框,選擇之後,在這個事件函數中,老是取到舊值,讀了這個朋友的文章,找到了解決方法。

下面是參考的文章: http://scorpiomiracle.iteye.com/blog/710511

在編一個 MFC程序時,想響應一個下拉框ComboBox控件選擇改變的事件,可是,老是在下一次選擇改變的時候才觸發上次的響應。

1,關聯變量就是經過 GetDlgItemText/SetDlgItemText 的方式更新的

2,在ComboBox發送 CBN_SELCHANGE 消息的時候,只是改變了GetCurSel得到的索引,關聯變量是操做完成以後才能更新的,因此窗口文字尚未更新,經過關聯變量 UpdateData(true)取得的就仍是原來的文字。

3,實踐證實,此時使用 CBN_EDITUPDATE 和 CBN_EDITCHANGE 沒有任何反應。一種說法是 這只是響應 直接 在文本框 輸入值 的事件,未求證。另外,響應 CBN_SELENDOK 的實際效果也是在窗口文字尚未改變的時候就響應了。

解決方法:
在 CBN_SELCHANGE 的響應函數中:
int index = ((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(index);
drawNODE(); // 此函數中有 UpdateData(true) 來獲取關聯變量,即改變後的值

或者:
GetCurSel()+GetLbText(n,strTemp)來取得改變後的值 函數

相關文章
相關標籤/搜索