CComboBox FindString为空

时间:2016-07-08 17:45:47

标签: string visual-c++ combobox mfc is-empty

MFC CComboBox允许一个人做一个空字符串AddString。我刚刚通过在AddString之后执行GetCount()和另一个之后证明了这一点;计数为0,然后变为1; GUI也似乎反映了它,因为它的列表是一个巨大的空盒子,当它添加它成为一个单行时。

我还通过

进一步证明了这一点
            int a = m_combo.GetCount();
            CString sx= _T("Not empty string");
            if(a == 1)
                m_combo.GetLBText(0, sx);

            TRACE(_T("Start<%s>End"), sx);

并显示“输出”窗口

File.cpp(9) : atlTraceGeneral - Start<>End

因此我们得出结论sx变量为空。

然后我做一个FindString的CString m_name变量为空:

 int idx= m_combo.FindString(-1, m_name);

它返回CB_ERR

是空字符串条目的标准行为吗?官方文档没有说明任何内容!

如果是,覆盖它的最简单方法是什么?是否有一些参数或资源的变化来改变行为?如果没有,我正在考虑为字符串为空的情况派生或编写一个类!

1 个答案:

答案 0 :(得分:1)

我手动为空字符串做了它,它可以工作!

CString sItem;
int idx_aux= CB_ERR;

// need it because FindString, FindStringExact and SelectSring return CB_ERR when we provide an empty string to them!

if(m_name.IsEmpty())
{
    for (int i=0; i<m_combo.GetCount(); i++)
    {
        m_combo.GetLBText(i, sItem);

        if(sItem.IsEmpty())
        {
            idx_aux= i;
            break;
        }
    }
}
else
    idx_aux= m_combo.FindString(-1, m_name);