我哪里错了?我有这个代码:
CComboBox m_item;
if((m_item.GetCurSel()) == atoi("TC001"))
MessageBox(L"TC001");
if((m_item.GetCurSel()) == atoi("TC002"))
MessageBox(L"TC002");
如果我选择" TC001"在ComboxBox
中,它会弹出两者" TC001"和" TC002"消息框。
如果我选择" TC002"在ComboxBox
中,它没有显示任何 MessageBox
。
为什么?
答案 0 :(得分:3)
来自atoi的文档:
解释str。
指向的字节字符串中的整数值丢弃任何空白字符,直到找到第一个非空白字符,然后获取尽可能多的字符以形成有效的整数表示并将它们转换为整数值。有效整数值由以下部分组成:
- (可选)加号或减号
- 数字数字
[...]如果无法执行转换,则会返回
0
。
字符串"TC001"
和"TC002"
无法转换为整数,因此在{2}中调用atoi
会返回0
。
组合框[...]
列表框中当前所选项目的从零开始的索引
因此,如果带有显示字符串"TC001"
的项目是第一项,GetCurSel
返回0
,则atoi
在非整数输入上返回相同的值。两个比较都返回true
,因此会显示两个消息框。
解决方案有两个方面:
lParam
成员答案 1 :(得分:3)
您希望比较所选文字,而不是所选项目编号。为此,请使用CComboBox::GetLBText()。
CStringW text;
m_item.GetLBText(m_item.GetCurSel(), text);
if (text == L"TC001")
MessageBox(L"TC001");
else if (text == L"TC002")
MessageBox(L"TC002");