Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: (Winform) Tại sao ListView phản ứng rất chậm(delay 1s) khi MouseHover qua từng item

  1. #1
    Ngày gia nhập
    10 2009
    Nơi ở
    gầm cầu
    Bài viết
    156

    Mặc định (Winform) Tại sao ListView phản ứng rất chậm(delay 1s) khi MouseHover qua từng item

    không những vậy khi MouseHover qua từng item thì toàn bộ item của ListView lại nhấp nháy 1 cái .
    Có anh chị nào từng bị như vậy chưa ạ ?
    Code:
    private void Form1_Load(object sender, EventArgs e)
            {
                listView1.View = View.Details;
                listView1.Columns.Add("col 1");
                listView1.Columns.Add("col 2");
                for (int i = 1; i <= 10;i++ )
                {
                    ListViewItem lvi = listView1.Items.Add(i+"");
                    lvi.SubItems.Add("value" + i);
                }
                listView1.FullRowSelect = true;
            }
    chọn sự kiện cho MouseHover

    Code:
            ListViewItem old_item;
            private void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
            {
                if (old_item !=null)
                {
                    old_item.BackColor = Color.White;
                }
                old_item = e.Item;
                e.Item.BackColor = Color.Silver;
            }
    ko biết Code của em có chỗ nào chưa đúng làm ListView bị "Lag" như vậy ?.mong các anh chị xem giúp

  2. #2
    Ngày gia nhập
    08 2012
    Bài viết
    574

    Mình đã thử, cũng bị vậy.

    Của bạn chẳng sai chỗ nào cả. Có lẽ đây là kết quả của quá trình vẽ lại của Control này.
    Bạn nói 1 giây thì đúng là hơi quá. Mình tính toán thì trễ khoảng 50 - 200 tích tắc (1/20 - 1/5 giây).

  3. #3
    Ngày gia nhập
    02 2009
    Bài viết
    1

    bạn bỏ vào 1 cái datatable roài cho nó show ra = list view xem thử có nhanh hơn ko

  4. #4
    Ngày gia nhập
    10 2009
    Nơi ở
    gầm cầu
    Bài viết
    156

    sau khi hỏi anh Google mình cũng chia sẻ vài điều để các bạn làm ListView gặp trường hợp tương tự có thể tìm dc hướng giải quyết ngay tại đây
    chúng ta có 2 vấn đề và sẽ giải quyết từng cái .

    Vấn đề 1 : delay khi MouseHover qua từng Item ListView

    ý tưởng đầu tiên là tìm 1 giá trị nào đó trong Registry quyết định đến MouseHover delay và sửa lại nó .nhưng ý này ko ổn . vì giá trị đó dù có tìm dc cũng ko nên sửa vì nó là giá trị dc dùng chung cho mọi ứng dụng của Window chứ đâu phải chỉ dành riêng cho ListView của ta đang xài ...
    Nhưng thật may là ListView cung cấp phương thức khác để xác định Item dựa vào tọa độ chuột .và ListView đương nhiên phản ứng rất nhanh với sự kiện di chuyển chuột .Vậy nên chúng ta dùng sự kiện MouseMove để lướt qua từng Item

    Visual C# Code:
    1. ListViewItem old_item ;
    2. private void listView1_MouseMove(object sender, MouseEventArgs e)
    3.         {
    4.            
    5.             ListViewItem lvi = listView1.GetItemAt(e.X, e.Y);
    6.             if (old_item != lvi && old_item != null)
    7.             {
    8.                 old_item.BackColor = Color.White;
    9.             }
    10.             if (lvi != null && lvi != old_item)
    11.             {
    12.                 lvi.BackColor = Color.Yellow;
    13.                 old_item = lvi;
    14.             }
    15.         }

    vấn đề 2 : ListView nhấp nháy khi thay đổi giá trị BackColor của Item

    khi chúng ta thay đổi thuộc tính nào đó của Item (Text, BackColor, ForeColor,...) tự nhiên ListView nhấp nháy ....
    giải quyết : tạo 1 Class kế thừa ListView để sửa lại giá trị DoubleBuffered

    Visual C# Code:
    1. public class ListViewKhac : ListView
    2.     {
    3.         public ListViewKhac() :base ()
    4.         {
    5.             this.DoubleBuffered = true;
    6.         }
    7.     }

    lúc này trong cửa sổ kéo thả của ToolBox đã xuất hiện Control mới tên ListViewKhac .nó cũng là ListView đấy . Sử dụng Control này thay cho ListView sẽ ko còn bị nhấp nháy mỗi khi sửa giá trị Item

Các đề tài tương tự

  1. Di chuyển item từ listview này sang listview khác?
    Gửi bởi taocao1m8 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 19-12-2012, 02:55 PM
  2. Winform. Làm thế nào để thêm nhiều checkbox vào 1 item ListView hoặc TreeView
    Gửi bởi votrongtrung1 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 11-04-2012, 01:47 PM
  3. Select item trong listview khi biết index của item
    Gửi bởi dotritiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 16-09-2011, 11:19 AM
  4. Trả lời: 4
    Bài viết cuối: 11-09-2011, 06:10 PM
  5. Load 1 Item lên Listview sau đó Select Item đó
    Gửi bởi minhquan22 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 25-11-2010, 10:01 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn