Basierend auf dem Pfosten, der @Adriaan Stander poste d Meine Klasse zum Erhöhen der Scroll-Ereignisse ist unten.
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());
}
}
}
}
Verwenden Sie es wie so ...
Deklarieren Sie ein Feld:
private ControlScrollListener _processListViewScrollListener;
es mit den Kontrollen Instantiate, die Sie wissen müssen, issrolling:
_processListViewScrollListener = new ControlScrollListener(ProcessesListView);
Hautnah ein Handler:
_processListViewScrollListener.ControlScrolled += ProcessListViewScrollListener_ControlScrolled;
Handler die Veranstaltung:
void ProcessListViewScrollListener_ControlScrolled(object sender, EventArgs e)
{
// do what you need to do
}
Die Veranstaltung args im Falle angehoben könnten weitere nützliche Informationen enthalten werden gezwickt. Ich musste nur wissen, dass meine Kontrolle gescrollt wurde!
vielen Dank nobugz. Genau das versuche ich zu erreichen. – murasaki5
Lesen Sie http://stackoverflow.com/questions/1176703/listview-onscroll-event/1182232#1182232, um einige Einschränkungen mit der WM_VSCROLL-Nachricht anzuzeigen. – Grammarian
Diese Antwort hat einen fiesen Bug auf Net Framework 2.0 mit Gitternetzlinien behoben – Mandrake