2

ListView は Scroll イベントをサポートしていないようです。リストがスクロールされるたびに関数を呼び出す必要があります。どうすればそれについて行くでしょうか?

4

2 に答える 2

6

リストがスクロールされたときに関数を呼び出す必要があるのはなぜですか?

スクロール中にアイテムを変更する場合は、リストビューを仮想に設定することをお勧めします。

または、リストビューをオーバーライドして次のようにすることもできます。

public class TestListView : System.Windows.Forms.ListView
{
    private const int WM_HSCROLL = 0x114;
    private const int WM_VSCROLL = 0x115;
    public event EventHandler Scroll;

    protected void OnScroll()
    {

        if (this.Scroll != null)
            this.Scroll(this, EventArgs.Empty);

    }

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
            this.OnScroll();
    }
}
于 2008-12-17T19:50:50.283 に答える
4

最良のアプローチはブライアンのソリューションのようです。ただし、スクロールバーによって生成されたイベントにのみ応答し、マウスの中央ボタンからのイベントには応答しません。

条件を変更した場合:

   if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL) 
             this.OnScroll();

に:

   if (m.Msg == 0x000c2c9) 
             this.OnScroll();

リストビューのすべてのスクロールイベントで応答するようになりました。

于 2010-08-05T13:03:12.527 に答える