wwwjw 发表于 2008-6-17 16:51

一个组合框应用的小问题

组合框中怎么给它添加下拉的内容:
void CCityZoneDlg::OnButtonAdd()
{
        // TODO: Add your control notification handler code here
        if(!IsValidate())
                return;
        int nIndex=m_ComboBox.FindStringExact(-1,m_strCity);
        if(nIndex!=CB_ERR)
        {
                MessageBox("该城市已经添加!");
                return;
        }
        CString strData;
        strData.Format("%s,%s",m_strZip,m_strZone);
        m_ComboBox.SetItemDataPtr(nIndex,new CString(strData));
           
}
这是我看的书上的源程序,其中IsValidate()函数用于判断输入的是否为空,最后编译没有错误,但是当我检验生成的程序时,发现添加按钮不起作用,每次在输入框输入一个城市名,在邮政编码和区号里面也输入相应的代号,点击添加按钮,结果上次的输入就没了我想了一下,觉得上面的代码有些问题,既然要把一项内容加入到组合框,那就得有
m_ComboBox.AddString(m_strCity);
这行代码,应该放在倒数第三行,可我加入这行代码后。可以编译生成程序,但运行程序的时候,点击添加或修改按钮时,出现了未知错误,附件是我的源程序,
请大家帮忙看一下!谢谢了,刚学习没多长时间,

余来 发表于 2008-6-17 17:05

查找是否有相同用
FindString,返回值为-1则没找到,也就是没相同的,这里修改一下

m_ComboBox.SetItemDataPtr(nIndex,new CString(strData));
这里修改成m_ComboBox.AddString(m_strCity);

wwwjw 发表于 2008-6-17 19:49

我把相应的代码改成了
void CCityZoneDlg::OnButtonAdd()
{
        // TODO: Add your control notification handler code here
        if(!IsValidate())
                return;
        int nIndex=m_ComboBox.FindStringExact(-1,m_strCity);
        if(nIndex!=CB_ERR)
        {
                MessageBox("该城市已经添加!");
                return;
        }
        CString strData;
        strData.Format("%s,%s",m_strZip,m_strZone);
        m_ComboBox.AddString(m_strCity);
        //m_ComboBox.SetItemDataPtr(nIndex,new CString(strData));
           
}
我不大明白你说的意思,为什么要把
m_ComboBox.SetItemDataPtr(nIndex,new CString(strData));
替换为
m_ComboBox.AddString(m_strCity);
替换后,没有变量与组合框相关联,那在用组合框选择一个选项时在邮政编码和区号里面怎么相应的显示呢?
您能运行一遍确认无误后,把修改后的源码贴出吗?
谢谢!

页: [1]

编程论坛