[ad_1]
void CDlgCorrection::RowSelected() { m_bInizio = false; for (int i = 0; i < m_astrPath.GetSize(); i++) { m_lista.SetItemState(i, 0, LVIS_SELECTED); } m_lista.SetItemState(m_nRow, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_nRowSelected = m_nRow; m_lista.SetFocus(); m_lista.SetSelectionMark(m_nRow); }
Tôi đã sử dụng mã này để chọn một hàng trong CListCtrl của mình nhưng nếu tôi nhấp vào CListCtrl thì hàng đó được chọn nên tôi có 2 hàng được chọn..làm cách nào để tôi có thể bỏ chọn một hàng trước khi nhấp vào danh sách của mình
Những gì tôi đã thử:
Tôi đã cố gắng viết:
m_lista.SetItemState(m_nRow, ~LVIS_SELECTED | ~LVIS_FOCUSED, ~LVIS_SELECTED | ~LVIS_FOCUSED);
Tôi cũng đã thử
if(m_nRow!= -1) m_lista.SetItemState(m_nRow, ~LVIS_SELECTED, LVIS_SELECTED); POSITION pos = NULL; INT_PTR nPos; pos = m_lista.GetFirstSelectedItemPosition(); if (pos) { nPos = m_lista.GetNextSelectedItem(pos); } else { nPos = -1; }
nhưng dù sao tôi cũng đã chọn 2 hàng
….Tôi đã giải quyết:
void CDlgCorrection::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) { m_lista.SetItemState(m_nrow, 0, LVIS_SELECTED); m_nRowSelected = -1; m_lista.SetFocus(); m_lista.SetSelectionMark(-1); }
Giải pháp 2
Nếu có vấn đề khi chọn hai hàng thì hãy đặt thuộc tính của điều khiển để chỉ cho phép các lựa chọn duy nhất. Điều đó có thể được thực hiện bằng trình soạn thảo tài nguyên hoặc bằng mã.
Bạn có thể muốn xem xét sử dụng một trong nhiều lớp kiểm soát danh sách dẫn xuất có sẵn tại trang này. Tôi sử dụng cái này: CReportCtrl – Phiên bản cực kỳ tiện lợi của CListCtrl kiểu báo cáo[^].
Giải pháp 1
Thử:
m_lista.SetItemState(m_nRow, 0, LVIS_SELECTED | LVIS_FOCUSED);
Cái nào sẽ đặt hai bit trạng thái về 0.
Giải pháp 3
Thử cái này xem sao. Trong các hàm OnCreate của bạn
GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);
[ad_2]
コメント