问个ComboBox的问题

SXSXY 2004-04-29 05:28:00
请问ComboBox中的这三个消息有什么区别
CBN_EDITCHANGE
CBN_EDITUPDATE
CBN_SELCHANGE

查了MSDN,还是有些不明白。尤其是前两个,不懂它们有什么不同。
对于CBN_SELCHANGE,我现在的理解是用鼠标点击下拉框就会触发此消息,而对于Dropdown的ComboBox,改变框中的文字则不触发此消息
...全文
78 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
SXSXY 2004-04-29
GetWindowText
  • 打赏
  • 举报
回复
KONIEWU 2004-04-29
ComboBox中,我无法得到当前编辑的字符串
当前编辑字符串的index=-1
如果用GetLBText(index,sel)
会出现断言对话框,实在不知道怎么解决,只有在KeyDown中记录用户输入的字符
然后在用户敲“Enter"键的时候把,把字符串
AddString(str)
然后再用SetCurSel(Index)调到当前显示。
不知道谁比较好的方法。
  • 打赏
  • 举报
回复
SXSXY 2004-04-29
这样岂不是不管ComboBox是否被改变都会发生此事件,我要的并不是这样的效果
不过还是很感谢你
  • 打赏
  • 举报
回复
王国凡 2004-04-29
Q: 焦点离开ComboBox之后再做事件处理,该怎么办呢?
A: 响应 ON_CBN_KILLFOCUS 事件
  • 打赏
  • 举报
回复
SXSXY 2004-04-29
真是太感谢了
不过我还点疑问
通过上面方法的观察,只要text发生改变,就会发生这两个消息。那么我如果想等输入完text,焦点离开ComboBox之后再做事件处理,该怎么办呢
  • 打赏
  • 举报
回复
王国凡 2004-04-29
void CDialog2::OnEditupdateCombo1()
{
AfxMessageBox("Update");
}

void CDialog2::OnEditchangeCombo1()
{
AfxMessageBox("change");
}

void CDialog2::OnSelchangeCombo1()
{
AfxMessageBox("Selchange");
}

先修改 text ,再选中下拉框改变 text ,观察结果。
  • 打赏
  • 举报
回复
王国凡 2004-04-29
ON_CBN_SELCHANGE
在下拉选中的 text 改变了就发生,可以用 GetLBText 来获取 text,而不是 GetWindowText
  • 打赏
  • 举报
回复
王国凡 2004-04-29
ON_CBN_EDITCHANGE
在 text 改变了,显示出来之后发生,
( 如果是 CBS_DROPDOWNLIST 样式,则不发生 )

ON_CBN_EDITUPDATE
在 text 改变了,显示出来之前发生,
( 如果是 CBS_DROPDOWNLIST 样式,则不发生 )

也就是 ON_CBN_EDITCHANGE 在 ON_CBN_EDITUPDATE 之后发生
  • 打赏
  • 举报
回复
相关推荐
发帖
界面
加入

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2004-04-29 05:28
社区公告
暂无公告