列表框的使用
頁面佈局如下
- 使用類:
- CWnd:組建基類
- CListBox:列表框
- 使用函式:
- CWnd::UpdateData(bool):
- 引數為true:獲取控制元件中的資料
- 引數為false:更新控制元件的資料顯示
- CListBox::AddString():<int>:向列表中新增資料並返回該資料的索引值
- CListBox::DeleteString(int):從列表中刪除指定索引值的項
- CListBox::SetItemDataPtr(int, *xxx):設定指定索引值的關聯項指標
- CListBox::GetItemDataPtr(int):<*xxx>:獲取指定索引值的關聯項指標
- CListBox::GetCurSel():<int>:獲取當前選擇項的索引值
- CListBox::FindStringExact(int, string):[LB_ERR]:從指定位置搜尋列表中是否含有某項值
- CWnd::UpdateData(bool):
在DemoDlg中定義儲存資料的結構體
class CDemoDlg : public CDialog { ... private: struct student { CString name; long no; CString sex; int age; CString clazz; }; };
編寫新增事件
void CDemoDlg::OnInsert() { // 處理姓名 this->UpdateData(); if (this->m_name.IsEmpty()) { MessageBox("學生姓名不能為空!"); return; } m_name.TrimLeft(); m_name.TrimRight(); // 搜尋是否已經錄入 if ((m_list.FindStringExact(-1, m_name))!=LB_ERR) { MessageBox("該學生已被錄入,不可重複新增!"); return; } // 處理其他屬性 m_class.TrimLeft(); m_class.TrimRight(); m_sex.TrimLeft(); m_sex.TrimRight(); //新增到列表 int index = m_list.AddString(m_name); student std; std.name = m_name; std.sex = m_sex; std.age = m_age; std.clazz = m_class; std.no = m_no; m_list.SetItemDataPtr(index, new student(std)); }
編寫刪除事件
void CDemoDlg::OnDelete() { // 獲取當前選擇項的索引 int index = m_list.GetCurSel(); if (index != LB_ERR) { delete (student *)m_list.GetItemDataPtr(index); m_list.DeleteString(index); // 清空顯示資料 m_name = m_class = m_sex = ""; m_no = m_age = 0; // 更新資料顯示 UpdateData(); } else MessageBox("沒有選擇列表項!"); }
編寫列表框選擇事件
void CDemoDlg::OnSelchangeStudentList() { int index = m_list.GetCurSel(); if (index != LB_ERR) { // 獲得當前選擇的列表項的關聯結構體 student *pst = (student *)m_list.GetItemDataPtr(index); m_name = pst->name; m_age = pst->age; m_class = pst->clazz; m_no = pst->no; m_sex = pst->sex; // 更新視窗資料顯示 UpdateData(); } }
編寫退出事件
void CDemoDlg::OnCancel() { // 清除記憶體中的所有垃圾資料 for (int index = m_list.GetCount() - 1; index >= 0; index--) { delete (student *)m_list.GetItemDataPtr(index); } CDialog::OnCancel(); }
執行結果
本作品採用《CC 協議》,轉載必須註明作者和本文連結