2009-11-25 6 views
0

J'ai un petit problème dans une liste WinForms C# ListView (avec des modifications personnalisées pour trier et filtrer sur toutes les colonnes, mais c'est aussi arrivé dans un ListView standard).WinForms ListView lignes vides glitch

Je modifie les articles ListView avec ce modèle (assez standard):

BeginUpdate(); 
// add some items 
// remove some other items 
Sort(); 
EndUpdate(); 

Mais si j'appelle ce code lorsque le ListView est déjà défilée, je reçois des lignes vides (non sélectionnables) avant que le réel articles, et 2 scrollabars même si elles ne sont pas nécessaires.

Cela ressemble à un pépin graphique, car lorsque je fais défiler la liste, les éléments vides disparaissent.

Est-ce que quelqu'un a déjà rencontré ce problème?

+0

Ce genre de problème obscur nécessite un projet de repro pour affiner les causes possibles. Long shot: EndUpdate() appelle déjà Sort(), omettez votre appel et voyez s'il fait une différence. –

+0

Déjà retiré Sort(), pas de différence. Je suis en train de tester avec un petit projet, et je ne peux pas reproduire le problème, donc il y a vraiment quelque chose qui cloche avec mon code, mais je voulais vérifier si quelqu'un connaissait un tel problème merci beaucoup – Filini

Répondre

1

Ok, j'ai trouvé le problème. Un appel pour définir une colonne Width = -2 pendant le redimensionnement a été déconner les propriétaires-dessiner des filtres ...

0

Ce bug graphique ListView. Un problème similaire peut être reproduit, si en changeant la taille de ListView, changez la largeur de ses colonnes. En tant que solution, la méthode propose de changer la largeur dans un thread séparé.

private void ListView_SizeChanged(object sender, EventArgs e) 
{ 
    var widthChangedThread = new Thread(() => SetNewColumnSize()) {IsBackground = true}; 
    widthChangedThread.Start();    
} 

private void SetNewColumnSize() 
{ 
    Invoke(new MethodInvoker(() =>_columnHeader.Width += 10)); 
} 
Questions connexes