protected virtual bool HandleKeyDown(ref Message m)
{
// If this is a checkbox list, toggle the selected rows when the user presses Space
if (this.CheckBoxes && m.WParam.ToInt32() == (int)Keys.Space && this.SelectedIndices.Count > 0) {
this.ToggleSelectedRowCheckBoxes();
return true;
}
// Remember the scroll position so we can decide if the listview has scrolled in the
// handling of the event.
int scrollPositionH = NativeMethods.GetScrollPosition(this, true);
int scrollPositionV = NativeMethods.GetScrollPosition(this, false);
base.WndProc(ref m);
// It's possible that the processing in base.WndProc has actually destroyed this control
if (this.IsDisposed)
return true;
// If the keydown processing changed the scroll position, trigger a Scroll event
int newScrollPositionH = NativeMethods.GetScrollPosition(this, true);
int newScrollPositionV = NativeMethods.GetScrollPosition(this, false);
if (scrollPositionH != newScrollPositionH) {
ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.EndScroll,
scrollPositionH, newScrollPositionH, ScrollOrientation.HorizontalScroll);
this.OnScroll(args);
this.RefreshHotItem();
}
if (scrollPositionV != newScrollPositionV) {
ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.EndScroll,
scrollPositionV, newScrollPositionV, ScrollOrientation.VerticalScroll);
this.OnScroll(args);
this.RefreshHotItem();
}
return true;
}