在 MFC 對話框程序中,向 CComboBox 控件動態添加項目(AddString),但在 OnSelchange 響應函數中調用 UpdateData 後,下拉列表中的項目會被重複創建多次。
代碼添加項目的邏輯放置位置錯誤。若將 AddString 放在會被多次觸發的消息處理函數(如 OnSelchange、OnTimer、循環中)或 DoDataExchange 之後調用 UpdateData 導致數據交換時重複初始化,就會出現項目疊加。
僅在對話框初始化階段添加項目,推薦重寫 OnInitDialog() 函數:
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 僅在這裡添加一次
m_comboBox.AddString(_T("項目1"));
m_comboBox.AddString(_T("項目2"));
m_comboBox.SetCurSel(0); // 可選:設置默認選中
return TRUE;
}
OnInitDialog 在對話框創建時僅執行一次,保證項目不重複。UpdateData)或選擇變更事件中修改控件內容。ResetContent() 清空再重新填充。