关于ComboBox的控件事件CBN

    xiaoxiao2025-04-04  35

    转自:https://scorpiomiracle.iteye.com/blog/710511 在编一个 MFC程序时,想响应一个下拉框ComboBox控件选择改变的事件,但是,总是在下一次选择改变的时候才触发上次的响应。

    参考: http://topic.csdn.net/u/20090209/13/d1f74642-6098-40c2-8f4a-b053259b1ca3.html?seed=1987077585&r=66897224#r_66897224 中 cnzdgs 的两个回答,才明白:

    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)来取得改变后的值

    最新回复(0)