VC++ MFC -> 组合框、GetCurSel()?

问题描述 投票:0回答:2

我哪里错了?我有这个代码:

CComboBox m_item;

if((m_item.GetCurSel()) == atoi("TC001"))
    MessageBox(L"TC001");

if((m_item.GetCurSel()) == atoi("TC002"))
    MessageBox(L"TC002");

如果我在

ComboxBox
中选择“TC001”,则会弹出“TC001”和“TC002”消息框。

如果我在

ComboxBox

 中选择“TC002”,则不会显示 
any MessageBox

为什么?

visual-c++ combobox mfc
2个回答
3
投票
来自

atoi的文档:

解释 str 指向的字节字符串中的整数值。

丢弃所有空白字符,直到找到第一个非空白字符,然后采用尽可能多的字符来形成有效的整数表示形式,并将它们转换为整数值。有效的整数值由以下部分组成:

    (可选)加号或减号
  • 数字
[...] 如果无法进行转换,则返回

0

字符串

"TC001"

"TC002"
 无法转换为整数,因此对 
atoi
 的调用在两种情况下都会返回 
0

CComboBox::GetCurSel返回

组合框列表框中当前所选项目的从零开始的索引[...]

因此,如果显示字符串

"TC001"

 的项目是第一项,则 
GetCurSel
 返回 
0
,与 
atoi
 在非整数输入上返回的值相同。两次比较都返回 
true
,因此两个消息框都会显示。

解决方案有两个:


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");
    
© www.soinside.com 2019 - 2024. All rights reserved.