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 में क्लिक करता हूं तो पंक्ति चयनित हो जाती है, इसलिए मेरे पास 2 पंक्तियां चयनित हैं.. क्या मैं अपनी सूची में क्लिक करने से पहले एक पंक्ति का चयन रद्द कर सकता हूं?

मैंने क्या प्रयास किया है:

मैंने लिखने की कोशिश की:

सी++
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;
	}

लेकिन मैंने वैसे भी 2 पंक्तियाँ चुनी हैं

….मैंने सुलझाया:

सी++
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

ये कोशिश करें। आपके ऑनक्रिएट फ़ंक्शंस में

सी++
GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);

コメント

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