Le contrôle ListView a un problème de scintillement. Le problème semble être que le contrôle de la mise à Jour de la surcharge n'est pas correctement mis en œuvre tel qu'il agit comme un Rafraîchissement. Une mise à Jour devrait provoquer le contrôle de redessiner seulement de ses régions non valides alors qu'une Actualisation redessine le contrôle de l'ensemble de la zone client. Donc, si vous aviez à changer, par exemple, la couleur d'arrière-plan d'un élément dans la liste, puis seulement que le point particulier doit être repeint. Malheureusement, le contrôle ListView semble être d'un avis différent et veut repeindre toute sa surface chaque fois que vous salissez avec un seul élément... même si l'élément n'est pas affiché. Donc, de toute façon, vous pouvez facilement supprimer le scintillement en roulement de votre propre comme suit:
class ListViewNF : System.Windows.Forms.ListView
{
public ListViewNF()
{
//Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(Message m)
{
//Filter out the WM_ERASEBKGND message
if(m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
De: Geekswithblogs.net