2009-09-10 102 views

回答

13

該解決方案包括3個事件和bool類型的一個狀態變量:

private bool inhibitAutoCheck; 

private void listView1_MouseDown(object sender, MouseEventArgs e) { 
    inhibitAutoCheck = true; 
} 

private void listView1_MouseUp(object sender, MouseEventArgs e) { 
    inhibitAutoCheck = false; 
} 

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) { 
    if (inhibitAutoCheck) 
     e.NewValue = e.CurrentValue; 
} 

項檢查能夠避免過渡到另一個檢查狀態(ItemChecked事件之前調用)。解決方案簡單而可靠。

要找到它我做了一個小測試與不同的事件:

當點擊:

  1. 的MouseDown < -------------抑制區域
  2. 點擊
  3. 鼠標點擊
  4. 的MouseUp ------------->
  5. ItemCheck(抑制區域)
  6. ItemChecked

當雙擊:

  1. 的MouseDown < -------------抑制區域
  2. ItemSelectionChanged
  3. 的SelectedIndexChanged
  4. 點擊
  5. MouseClick
  6. 的MouseUp ------------->
  7. 的MouseDown < -------------抑制區域
  8. ItemCheck(內部抑制區域)
  9. ItemActivate
  10. 的DoubleClick
  11. MouseDoubleClick
  12. 的MouseUp ------------->
相關問題