判断当前选中的行
下面是一个button(按钮)的触发事件,按钮按下检测list control(列表)控件是否有选中的行,把选中的删除。(m_list 是list control 的变量名)
void CListDis::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
int iItem;
BOOL flag;
flag = false; // 判断标志,判断是否有选中行
for (iItem = m_list.GetItemCount() - 1; iItem >= 0; iItem--) // 获取列表的行数,进行循环判断
{
//m_list.GetItemState(iItem,LVIS_SELECTED)
if (LVIS_SELECTED == m_list.GetItemState(iItem, LVIS_SELECTED)) //选中行的判断
{
flag = true;
CString cs;
cs.Format(TEXT("删除当前选中的第%d行"), iItem+1);
MessageBox(cs);
m_list.DeleteItem(iItem);
// 在这里面进行更新容器以及更新文件
list<user>::iterator iter = file.users.begin();
for (int i = 0; i != iItem; iter++, i++);
file.users.erase(iter);
file.WriteUsers(file.users);
MessageBox(TEXT("删除成功"));
}
}
// 在没有选中行的情况下,给出一个提示
if (!flag) {
MessageBox(TEXT("当前好像什么都没有选中喔"), TEXT("删除失败"));
}
}
设置 list control 行选中
设置行选中还需要把把list control 的 Always show selection 属性修改为 True,默认情况下False。
m_list.SetFocus(); // 获取焦点在列表上面
// 设置第i行为选中的状态
m_list.SetItemState(i, LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED);
取消当前选中的行
m_list.SetItemState(i, 0, -1); // 把第i行设置为没有选中的状态