编辑框ID:IDC_EDIT_INPUT_STRING,绑定数值类型变量:CString m_edit_input_string;
添加当前项按钮ID:IDC_BUTTON_ADD_STRING
删除选中项按钮ID:IDC_BUTTON_DEL_STRING
组合框ID:IDC_CBX,绑定控件类型变量:CComboBox m_cbx;
列表框ID:IDC_LST,绑定控件类型变量:m_lstbox;
列表框和组合框都取消默认排序,按照元素添加先后顺序排序。
列表框设置为Extended模式,可以通过按住Ctrl键选择多项元素。
添加元素
在编辑框中输入字符串,点击添加当前项按钮,分别将字符串添加至组合框和列表框,并设置当前选中项为新添加的元素。
添加之前,判断是否为空,且防止出现输出连续多个空格情况,使用Trim()方法去除字符串左右两端空格。
还需要进行去重判断,如果重复则不会添加至组合框。去重可以使用STL set集合,也可以直接使用FindString()方法查找是否已经存在过该元素。
void CDemoDlg::OnBnClickedButtonAddString()
{
UpdateData(TRUE);
m_edit_input_string.Trim();
if (m_edit_input_string.IsEmpty()) {
AfxMessageBox(_T("请先输入内容"));
return;
}
int idx = -1;
if (m_cbx.FindString(idx, m_edit_input_string) >= 0) {
AfxMessageBox(_T("请不要重复插入相同值"));
return;
}
m_cbx.AddString(m_edit_input_string);
m_cbx.SetCurSel(m_cbx.GetCount() - 1);
m_lstbox.AddString(m_edit_input_string);
m_lstbox.SetCurSel(m_lstbox.GetCount() - 1);
m_edit_input_string = _T("");
UpdateData(FALSE);
}
对于组合框,每一次只删除当前选中的项目。如果删除最后一个项目,当前选中项设置为删除后的最后一项,即长度-1;如果删除的不是最后一项,后面的元素会自动上移,则当前选中项还是设置为删除之前的索引。
int cbx_idx = m_cbx.GetCurSel();
if (~cbx_idx) {
m_cbx.DeleteString(cbx_idx);
if (cbx_idx == m_cbx.GetCount()) m_cbx.SetCurSel(m_cbx.GetCount() - 1);
else m_cbx.SetCurSel(cbx_idx);
}
对于列表框,可以选择多项内容,获取选择的元素下标,再通过for循环从后向前遍历删除选中的元素。
int lstbox_count = m_lstbox.GetCount();
CArray<int> lstbox_sel_idxs;
lstbox_sel_idxs.SetSize(lstbox_count);
for (int i = 0; i < lstbox_count; i ) lstbox_sel_idxs[i] = -1;
m_lstbox.GetSelItems(lstbox_count, lstbox_sel_idxs.GetData());
for (int i = lstbox_sel_idxs.GetCount() - 1; i >= 0; i--) {
output_string.Format(_T("%d\n"), lstbox_sel_idxs[i]);
OutputDebugString(output_string);
if(~lstbox_sel_idxs[i])
m_lstbox.DeleteString(lstbox_sel_idxs[i]);
}
- MFC统计字符串长度和字符数
- MFC控件访问7种方法
,