۱۳۸۷/۱۲/۰۹

مشكل چشمك زدن (Flicker) در كنترل ListView


با هر بار اضافه كردن يك سطر به ListView ، تمام ناحيه پس زمينه كنترل به روز شده و مشكل چشمك زدن (Flicker) آزار دهنده‌اي را پديد مي‌آورد. راه حل‌هاي زيادي براي رفع اين مشكل وجود دارد. براي مثال استفاده از متدهاي BeginUpdate و EndUpdate قبل و پس از افزودن تعداد زيادي ركورد به يك ListView . اما اگر اين كنترل توسط چند ترد در حال به روز رساني باشد و هربار هم تعداد آيتم‌هاي اضافه شده آنچنان زياد نباشد، اين روش اثري نداشته و باز هم مشكل flickering وجود خواهد داشت.
رفع اين مشكل راه حل بسيار ساده‌اي دارد كه به شرح زير است:

يك user control جديد ايجاد كنيد، آن‌را از ListView به ارث برده و سپس سطر زير را به constructor آن اضافه كنيد:

this.DoubleBuffered = true;

اكنون از اين ListView سفارشي بجايlistView استاندارد استفاده كنيد، مشكل برطرف مي‌شود!

public partial class CustomListView : ListView
{
public CustomListView()
{
this.DoubleBuffered = true;
}
}
شبيه به همين مورد را جهت كنترل ListBox نيز مي‌توان پياده سازي كرد