Bonjour,
j'ai actuellement un problème franchement bizarre avec mes listview. Concrêtement, après avoir ajouté des items dans ma listview (chaque item possédant des subitems), les subitems ne s'affichent pas. Je dois absolument mettre ce bout de code pour afficher convenablement mes subitems (ce bout de code est situé dans une méthode d'un listview surchargé) :
For Each it In Me .Items
For Each isub In it.SubItems
isub.Text = isub.Text
Next
Next
Clairement, ce code est inutile (!!), mais sans lui mes subitems ne sont pas affichés :-p
Par contre je suis certain qu'ils ont bien la bonne valeur, puisque le tri par colonne fonctionne ! Seul l'affichage est moisi. Il va sans dire que Me.Refresh ne change rien...
Bref, est-ce un bug connu ?
Parce que mettre ce bout de code me laisse perplexe, et çà ralentit quelque peu l'affichage quand j'ai 1000 items et 10 subitems...
Le contexte d'utilisation est assez complexe (c'est une listview surchargé avec refresh que de certains items toutes les x secondes), donc inutile de poster le code complet.
Voilà quand même la listview surchargée :
Option
StrictOnImports
System.Windows.Forms.ListViewPublic
Class DoubleBufferedLVInherits System.Windows.Forms.ListViewPrivate m_SortingColumn As ColumnHeader' ========================================' Public' ========================================PublicSubNew()MyBase.New()' Set double buffered property to true'Me.DoubleBuffered = TrueEndSubPublicProperty OverriddenDoubleBuffered() AsBooleanGetReturnMe.DoubleBufferedEndGetSet(ByVal value AsBoolean)Me.DoubleBuffered = valueEndSetEndPropertyProtectedOverridesSub OnColumnClick(ByVal e As System.Windows.Forms.ColumnClickEventArgs)MyBase.OnColumnClick(e)' Get the new sorting column.Dim new_sorting_column As ColumnHeader = _Me.Columns(e.Column)' Figure out the new sorting order.Dim sort_order As System.Windows.Forms.SortOrderIf m_SortingColumn IsNothingThen' New column. Sort ascending.sort_order = SortOrder.Ascending
Else' See if this is the same column.If new_sorting_column.Equals(m_SortingColumn) Then' Same column. Switch the sort order.If m_SortingColumn.Text.StartsWith("> ") Thensort_order = SortOrder.Descending
Elsesort_order = SortOrder.Ascending
EndIfElse' New column. Sort ascending.sort_order = SortOrder.Ascending
EndIf' Remove the old sort indicator.m_SortingColumn.Text = m_SortingColumn.Text.Substring(2)
EndIf' Display the new sort order.m_SortingColumn = new_sorting_column
If sort_order = SortOrder.Ascending Thenm_SortingColumn.Text =
"> " & m_SortingColumn.TextElsem_SortingColumn.Text =
"< " & m_SortingColumn.TextEndIf' Create a comparer.Me.ListViewItemSorter = New ListViewComparer(e.Column, sort_order)' Sort.Me.Sort()EndSubEnd
ClassMerci de votre aide
@+