我哪里出问题了?我有这个密码:
CComboBox m_item;
if((m_item.GetCurSel()) == atoi("TC001"))
MessageBox(L"TC001");
if((m_item.GetCurSel()) == atoi("TC002"))
MessageBox(L"TC002");
如果我在ComboxBox
中选择“ComboxBox
”,它会弹出 "TC001“和"TC002”消息框。
如果我在ComboxBox
中选择“ComboxBox
”,它将不会显示任何 MessageBox
。
为什么?
发布于 2018-03-07 00:33:42
来自阿托伊的文档
用str指向的字节字符串解释整数值。 丢弃所有空白字符,直到找到第一个非空白字符,然后尽可能多地使用字符来形成有效的整数表示,并将它们转换为整数值。有效整数值由以下部分组成:
..。如果不能执行转换,则返回0
。
字符串"TC001"
和"TC002"
不能转换为整数,因此对atoi
的调用在这两种情况下都返回0
。
组合框列表框中当前选定项的基于零的索引.
因此,如果具有显示字符串"TC001"
的项是第一个项,则GetCurSel
返回0
,这是atoi
在非整数输入上返回的相同值。这两个比较都返回true
,因此显示了两个消息框。
解决办法有两方面:
lParam
成员。发布于 2018-03-07 01:47:09
看起来您想要比较选定的文本,而不是选定的项目编号。要做到这一点,请使用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");
https://stackoverflow.com/questions/49146890
复制