2010-07-12 26 views
8

Tôi có một ứng dụng Winforms trong C# với một điều khiển ListView. ListView này hiển thị danh sách các mục TO-DO và tôi đang sử dụng sự kiện 'ItemSelectionChanged' để xử lý các bản cập nhật.Listview ItemSelectionSắp đổi đám cháy hai lần?

Sự cố là sự kiện 'ItemSelectionChanged' kích hoạt hai lần mỗi lần tôi cố gắng cập nhật.

Sự kiện ItemSelectionChanged làm mới biểu mẫu để biểu thị các bản cập nhật (ví dụ: xóa mục khỏi danh sách).

Có cách nào để tắt sự kiện sau khi làm mới không?

UPDATE1:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) 
    { 
     if (e.IsSelected) 
     {     
      listView1.Items[e.ItemIndex].Remove(); 

      listView1.SelectedIndices.Clear(); 
      listView1.Focus(); 

      listView1.Update(); 
     } 
     else 
     { 

     } 

    } 

Trả lời

10

Vâng, nó sẽ bắn hai lần. Một lần vì mục đã chọn trước đó đã không được chọn, một lần nữa cho mục mới được chọn. Bạn chỉ cần đảm bảo rằng bạn thấy sự kiện lựa chọn:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { 
     if (e.IsSelected) { 
      // Update form 
      //... 
     } 
    } 
+0

cảm ơn nhưng IsSelected đã không làm việc cho tôi. Phải có cái gì khác về mã của tôi mà giữ nó bắn hai lần. –

+0

Không, nó chắc chắn sẽ cháy hai lần. Điều này là do thiết kế. Vấn đề là phát hiện ra thứ bạn quan tâm. Điều đó không rõ ràng từ câu hỏi của bạn. –

1

Có chỉ loại bỏ các EventHandler lúc bắt đầu làm mới và thêm nó một lần nữa sau khi nó đã hoàn thành làm mới

tức

// Remove handler 
listView1.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); 

// Do refresh 

// Add again 
listView1.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); 
+0

Tôi có cần bất kỳ tham chiếu bổ sung nào cho 'OnSelectionChanged' không? –

+1

Không, bạn chỉ cần thay thế ListView với tên của ListViewControl của bạn tức là ListView1 và MethodName nên là tên của hàm được gọi khi sự kiện OnSelectionChanged được kích hoạt tức là ListView1_OnSelectionChanged nơi ListView1 lại là tên của ListViewControl của bạn – w69rdy

+0

Đối với tôi 'OnSelectionChanged' không hiển thị trong Intellisense. –

0

Tôi nghĩ bạn cần bỏ chọn thủ công mục ở cuối trình xử lý của mình.

listView1.SelectedItem = null;

Các vấn đề liên quan