2015-11-10 83 views
2

我有一個MFC組合框的部分項目後,如下圖所示:MFC組合框保持列表無效刪除其項目

ComboBox with items

當我刪除下面的代碼的項目:

void CComboBoxTestDlg::OnBnClickedButtonClear() 
{   
     CComboBox *pCmb = (CComboBox *)GetDlgItem(IDC_COMBO); 
     pCmb->ResetContent(); 
} 

它會刪除組合框內的字符串,但它會將列表的空白保留爲與高度相同,如同其中的項目如下所示:

ComboBox after deleting its content

我也試過這個代碼:

for (int i = pCmb->GetCount() - 1; i >= 0; i--) 
     pCmb->DeleteString(i); 

,並刪除裏面的物品,但它一直不想要的清單無效。

是否有任何方法刪除組合框的內容而不保留剩餘的空列表?

+3

如何在不包含任何項目時查看組合框列表? – flaviu2

+0

@ flaviu2組合框需要動態更新,並且必須具備清晰的功能。最初它沒有項目,並且如果用戶點擊「清除」,它應該清除所有項目。 是的,單擊「清除」後單擊組合框沒有用處,但如果用戶單擊它,它將看到很長的無效(和無意義)列表。 這是默認行爲還是我做錯了什麼?我只想重置到沒有任何項目或列表的初始狀態。 – manujcm

+0

@manujcm你沒有做錯任何事情。這是組合框的默認(和可疑)行爲。 –

回答

3

試試這個:

當項目在下拉列表中的號碼變爲零,稱之爲:

CRect rect; 
pCmb->GetClientRect(&rect); 
pCmb->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height() + 1, SWP_NOMOVE); 

現在下拉框具有最小的高度。

時(也就是隻要你添加項目)在下拉列表中非零項目數,稱之爲:

CRect rect; 
pCmb->GetClientRect(&rect); 
pCmb->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height() * N, SWP_NOMOVE); 

其中N在下拉菜單中的行所需的最大高度組合框的框。

+0

It works perfect。Thank you very much !!!!! – manujcm

+0

@manujcm隨時upvote和/或接受答案 –

+0

我點擊既接受答案和upvote,但它說:「一旦你有15的聲望,你的投票將改變公開顯示的帖子得分「。我希望至少答案被認爲是可以接受的,儘管我的聲望很低。 – manujcm