@Adriaan Stander poste dスクロールイベントを発生させるためのクラスは以下の通りです。で
_processListViewScrollListener = new ControlScrollListener(ProcessesListView);
ワイヤー:
private ControlScrollListener _processListViewScrollListener;
あなたはissrollingを知るために必要なコントロールとそれをインスタンス化:
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());
}
}
}
}
フィールドを宣言し...そうのようにそれを使用しますハンドラ:
_processListViewScrollListener.ControlScrolled += ProcessListViewScrollListener_ControlScrolled;
ハンドライベント:
void ProcessListViewScrollListener_ControlScrolled(object sender, EventArgs e)
{
// do what you need to do
}
上げイベントでのイベント引数は、より多くの有用な情報を含むように微調整することができます。私はコントロールがスクロールされたことを知る必要がありました!
出典
2016-02-26 07:26:16
Dib
ありがとうございましたnobugz。これはまさに私が達成しようとしていることです。 – murasaki5
WM_VSCROLLメッセージの制限事項については、http://stackoverflow.com/questions/1176703/listview-onscroll-event/1182232#1182232を参照してください。 – Grammarian
この回答はネットフレームワーク2.0の厄介なバグを解決しました – Mandrake