حدد الصف في clistctrl


سي ++
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);
}

لقد استخدمت هذا الرمز لتحديد صف في CListCtrl ولكن إذا قمت بالنقر فوق في CListCtrl الخاص بي، فسيتم تحديد الصف، لذا لدي صفين محددين.. كيف يمكنني إلغاء تحديد صف قبل النقر في قائمتي

ما حاولت:

حاولت أن أكتب:

سي ++
m_lista.SetItemState(m_nRow, ~LVIS_SELECTED | ~LVIS_FOCUSED, ~LVIS_SELECTED | ~LVIS_FOCUSED);

حاولت أيضا

سي ++
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;
	}

ولكن لدي على أي حال تم تحديد صفين

….لقد حللت:

سي ++
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);
}

الحل 2

إذا كان تحديد صفين يمثل مشكلة، فقم بتعيين خصائص عنصر التحكم للسماح بتحديدات فردية فقط. يمكن القيام بذلك باستخدام محرر الموارد أو في التعليمات البرمجية.

قد ترغب في التفكير في استخدام إحدى فئات التحكم في القائمة المشتقة العديدة المتوفرة في هذا الموقع. أنا استخدم هذا: CReportCtrl – إصدار مناسب للغاية لنمط التقرير CListCtrl[^].

الحل 1

يحاول:

سي ++
m_lista.SetItemState(m_nRow, 0, LVIS_SELECTED | LVIS_FOCUSED);

والتي يجب أن تحدد بتات الحالة إلى الصفر.

الحل 3

جرب هذا. في وظائف OnCreate الخاصة بك

سي ++
GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);

コメント

タイトルとURLをコピーしました