

如圖 當點擊添加按鈕添加一些資訊后,現在想多行洗掉,代碼如下:
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
if (!pList->GetSelectedCount())
{
AfxMessageBox(_T("請選擇一行再洗掉"));
return;
}
POSITION pos = pList->GetFirstSelectedItemPosition();
while (pos)
{
int nSel = pList->GetNextSelectedItem(pos);
CString str = pList->GetItemText(nSel, 0);
if (IDNO == AfxMessageBox(_T("確定要洗掉") + str + _T("的資訊嗎?"), MB_YESNO))
continue;
pList->DeleteItem(nSel);
}
這里工號定義的是int型
當選中多項后,選擇洗掉,出現問題:洗掉了沒有選中的項。經過分析發現當洗掉第一項后,pos指向下一個位置,但此時第一個選中的已經被洗掉,導致pos指向位置發生錯位,第二個洗掉的已不是本應該洗掉的,導致洗掉問題。
這個應該怎么解決呢?謝謝大家解答。
uj5u.com熱心網友回復:
經過分析,我的想法是從最后一個開始洗掉,但是不知道該怎么修改代碼uj5u.com熱心網友回復:
經過思考發現實際上是因為洗掉前邊的行導致pos指向出現問題,所以只要讓pos指向當前實際的位置即可修改代碼如下
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
if (!pList->GetSelectedCount())
{
AfxMessageBox(_T("請選擇一行再洗掉"));
return;
}
POSITION pos = pList->GetFirstSelectedItemPosition();
while (pos)
{
int nSel = pList->GetNextSelectedItem(pos);
CString str = pList->GetItemText(nSel, 0);
if (IDNO == AfxMessageBox(_T("確定要洗掉") + str + _T("的資訊嗎?"), MB_YESNO))
continue;
pList->DeleteItem(nSel);
pos = pList->GetFirstSelectedItemPosition();
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
pos = pList->GetFirstSelectedItemPosition(); 好uj5u.com熱心網友回復:
代碼功能歸根結底不是別人幫自己看或講解或注釋出來的;而是被自己靜下心來花足夠長的時間和精力親自動手單步或設斷點或對執行到某步獲得的中間結果顯示或寫到日志檔案中一步一步分析出來的。提醒:再牛×的老師也無法代替學生自己領悟和上廁所!
單步除錯和設斷點除錯(VS IDE中編譯連接通過以后,按F10或F11鍵單步執行,按Shift+F11退出當前函式;在某行按F9設斷點后按F5執行停在該斷點處。)是程式員必須掌握的技能之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/91059.html
標籤:基礎類
上一篇:mciSendString
