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
!
是空字符串条目的标准行为吗?官方文档没有说明任何内容!
如果是,覆盖它的最简单方法是什么?是否有一些参数或资源的变化来改变行为?如果没有,我正在考虑为字符串为空的情况派生或编写一个类!
答案 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);