0

コンボボックスと削除ボタンがあります。削除ボタンが押されたときに次のコンボボックスアイテムをポップアップさせ、最後のアイテムがクリーンコンボボックスで選択されたアイテムを削除したときにしたい。

インデックスを使用していくつかの方法を試しましたが、1つでも役に立ちません。

私のコードがあります:

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

私は解決策を見つけました:

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 に答える
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 に答える