当在Combobox中删除项目时,第二个弹出MFC

时间:2013-01-31 03:09:05

标签: c++ mfc combobox

我有组合框和删除按钮。我想在按下删除按钮时弹出下一个组合框项目,并在最后一项删除时清除组合框所选项目。

我用索引尝试了几种方法,但即使是一种方法也无法帮助我。

有我的代码:

if(IDYES == MessageBox(L"Delete save?",L"Delete", MB_YESNO|MB_ICONQUESTION)){
            CString pFileName = L"Save\\"+str+".dat";
            CFile::Remove(pFileName);
            CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_SAVE);
            pComboBox->ResetContent();
        }

如何在按下删除按钮时弹出下一个组合框项目以及最后一项删除时清除组合框所选项目?

2 个答案:

答案 0 :(得分:1)

因此,在这种情况下,您不需要使用ResetContent()。如果你已经知道组合框中当前选择的项目(我想在轨道的某个地方,你会使用行int iSel = pComboBox->GetCurSel();),你可以使用这段代码放置你的pComboBox->ResetContent();

pComboBox->DeleteString(iSel);
if(iSel < pComboBox->GetCount())
  pComboBox->SetCurSel(iSel);
else if(iSel > 0)
  pComboBox->SetCurSel(iSel-1);

但是,我认为这不是必要的。我认为这个项目会自行移动。所以,忘记上面的代码,只需使用:

pComboBox->DeleteString(pComboBox->GetCurSel())

答案 1 :(得分:1)

我找到了解决方案:

void CL2HamsterDlg::OnBnClickedButtonDelete(){
    if(Validate()){
        if(IDYES == MessageBox(L"Delete save?",L"Delete", MB_YESNO|MB_ICONQUESTION)){
            CString pFileName = L"Save\\"+str+".dat";
            CFile::Remove(pFileName);
            CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_SAVE);
            lookforfile();
            int nIndex = pComboBox->GetCurSel();
            if (nIndex == CB_ERR)
                pComboBox->SetCurSel(0);
            else{
                pComboBox->SetEditSel(0, -1);
                pComboBox->Clear();
            }
        }
        LoadSave(false);
    }else
        AfxMessageBox(L"Please select or write correct name!");
}

该函数查找文件刷新索引

void CL2HamsterDlg::lookforfile()
{
    Value.GetWindowText(str);
    CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_SAVE);
    pComboBox->ResetContent();
    GetCurrentDirectory(MAX_PATH,curWorkingDir);
    _tcscat_s(curWorkingDir, MAX_PATH, _T("\\Save\\*.dat"));
    BOOL bWorking = finder.FindFile(curWorkingDir);
    while (bWorking){   
        bWorking = finder.FindNextFile();
        if (!finder.IsDots())
            pComboBox->AddString(finder.GetFileTitle());
    }
    GetDlgItem(IDC_COMBO_SAVE)->SetWindowText(str);
}