Sélectionnez la ligne dans clistctrl

la programmation


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

J’ai utilisé ce code pour sélectionner une ligne dans ma CListCtrl mais si je clique dans ma CListCtrl, la ligne est sélectionnée, j’ai donc 2 lignes sélectionnées..comment puis-je désélectionner une ligne avant de cliquer dans ma liste

Ce que j’ai essayé :

J’ai essayé d’écrire :

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

j’ai essayé aussi

C++
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;
	}

mais j’ai quand même 2 lignes sélectionnées

….J’ai résolu:

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

Solution 2

Si la sélection de deux lignes pose problème, définissez les propriétés du contrôle pour autoriser uniquement les sélections uniques. Cela peut être fait avec l’éditeur de ressources ou dans le code.

Vous souhaiterez peut-être envisager d’utiliser l’une des nombreuses classes de contrôle de liste dérivées disponibles sur ce site. J’utilise celui-ci : CReportCtrl – Une version extrêmement pratique de CListCtrl de style rapport[^].

Solution 1

Essayer:

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

Ce qui devrait mettre les deux bits d’état à zéro.

Solution 3

Essaye ça. Dans vos fonctions OnCreate

C++
GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);

コメント

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