Basado en la publicación que @Adriaan Stander poste d mi clase para subir eventos de desplazamiento está abajo.
internal class ControlScrollListener : NativeWindow, IDisposable
{
public event ControlScrolledEventHandler ControlScrolled;
public delegate void ControlScrolledEventHandler(object sender, EventArgs e);
private const uint WM_HSCROLL = 0x114;
private const uint WM_VSCROLL = 0x115;
private readonly Control _control;
public ControlScrollListener(Control control)
{
_control = control;
AssignHandle(control.Handle);
}
protected bool Disposed { get; set; }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (Disposed) return;
if (disposing)
{
// Free other managed objects that implement IDisposable only
}
// release any unmanaged objects
// set the object references to null
ReleaseHandle();
Disposed = true;
}
protected override void WndProc(ref Message m)
{
HandleControlScrollMessages(m);
base.WndProc(ref m);
}
private void HandleControlScrollMessages(Message m)
{
if (m.Msg == WM_HSCROLL | m.Msg == WM_VSCROLL)
{
if (ControlScrolled != null)
{
ControlScrolled(_control, new EventArgs());
}
}
}
}
Se usa como tal ...
Declarar un campo:
private ControlScrollListener _processListViewScrollListener;
instanciarlo con los controles que usted necesita saber issrolling:
_processListViewScrollListener = new ControlScrollListener(ProcessesListView);
alambre de un controlador:
_processListViewScrollListener.ControlScrolled += ProcessListViewScrollListener_ControlScrolled;
Handler caso:
void ProcessListViewScrollListener_ControlScrolled(object sender, EventArgs e)
{
// do what you need to do
}
Los argumentos de eventos en el caso planteado podría ser ajustado para contener la información más útil. ¡Solo necesitaba saber que mi control había sido desplazado!
muchas gracias nobugz. esto es exactamente lo que estoy tratando de lograr. – murasaki5
Lea http://stackoverflow.com/questions/1176703/listview-onscroll-event/1182232#1182232 para ver algunos límites con el mensaje WM_VSCROLL. – Grammarian
esta respuesta ha resuelto un error desagradable en net framework 2.0 con gridlines – Mandrake