FixedListView.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System.Collections;
  2. namespace CustomFormControl
  3. {
  4. public class FixedListView : ListView
  5. {
  6. private int _lastItemIndexClicked1 = -1;
  7. private int _lastItemIndexClicked2 = -1;
  8. private bool _shiftOn;
  9. protected override void OnKeyDown(KeyEventArgs e)
  10. {
  11. _shiftOn = e.Shift;
  12. base.OnKeyDown(e);
  13. }
  14. protected override void OnKeyUp(KeyEventArgs e)
  15. {
  16. _shiftOn = false;
  17. base.OnKeyUp(e);
  18. }
  19. protected override void OnMouseDown(MouseEventArgs e)
  20. {
  21. ListViewItem it = GetItemAt(e.X, e.Y);
  22. if (it == null)
  23. {
  24. //lastItemIndexClicked2 = -1;
  25. }
  26. else
  27. {
  28. _lastItemIndexClicked2 = it.Index;
  29. }
  30. if (!_shiftOn || (_lastItemIndexClicked1 < 0))
  31. {
  32. _lastItemIndexClicked1 = _lastItemIndexClicked2;
  33. }
  34. base.OnMouseDown(e);
  35. }
  36. protected override void OnVirtualItemsSelectionRangeChanged(
  37. ListViewVirtualItemsSelectionRangeChangedEventArgs e)
  38. {
  39. try
  40. {
  41. int start = _lastItemIndexClicked1;
  42. int end = _lastItemIndexClicked2;
  43. if (end < start)
  44. {
  45. int temp = start;
  46. start = end;
  47. end = temp;
  48. }
  49. if ((start >= 0) && (end >= 0))
  50. {
  51. ArrayList toRemove = new ArrayList();
  52. foreach (int index in SelectedIndices)
  53. {
  54. if ((index < start) || (index > end))
  55. toRemove.Add(index);
  56. }
  57. if (toRemove.Count > 0)
  58. {
  59. foreach (int index in toRemove)
  60. {
  61. SelectedIndices.Remove(index);
  62. }
  63. }
  64. }
  65. ListViewVirtualItemsSelectionRangeChangedEventArgs te =
  66. new ListViewVirtualItemsSelectionRangeChangedEventArgs(start, end, e.IsSelected);
  67. base.OnVirtualItemsSelectionRangeChanged(te);
  68. }
  69. catch
  70. {
  71. }
  72. }
  73. }
  74. }