[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); }
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 :
m_lista.SetItemState(m_nRow, ~LVIS_SELECTED | ~LVIS_FOCUSED, ~LVIS_SELECTED | ~LVIS_FOCUSED);
j’ai essayé aussi
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:
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:
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
GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);
[ad_2]
コメント