0

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

我尝试了几种使用索引的方法,但即使是一种也无济于事。

有我的代码:

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();
        }

当按下删除按钮和删除最后一个项目时,如何使下一个组合框项目弹出干净的组合框选定项目?

4

2 回答 2

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())
于 2013-01-31T04:32:52.390 回答
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);
}
于 2013-01-31T20:59:57.473 回答