Top / .NET備忘録 / 02.ListBox / 02.Scroll イベント

Scroll イベントは、WM_VSCROLL を捕まえるだけです。

WndProc 中の分岐に

        case WM_VSCROLL:
            // Scroll イベント
            base.WndProc(ref m);
            OnScroll(EventArgs.Empty);
            break;

を加え、

    public event EventHandler Scroll;
 
    protected virtual void OnScroll(EventArgs e)
    {
        if (Scroll != null) Scroll(this, e);
    }

のように実装します。

全コードです。

    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Diagnostics;
    using System.Windows.Forms;
 
    namespace VB6Control
    {
        public class VBListBox : ListBox
        {
            private int m_NewIndex = -1; // 初期値は -1
            const int
            LB_ADDSTRING = 0x0180,
            LB_INSERTSTRING = 0x0181,
            LB_DELETESTRING = 0x0182,
            LB_RESETCONTENT = 0x0184,
            WM_VSCROLL = 0x0115;
 
            public VBListBox()
            {
            }
 
            [DebuggerStepThrough]
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case LB_ADDSTRING:
                        // 追加されたときは戻り値を NewIndex とする
                        base.WndProc(ref m);
                        m_NewIndex = m.Result.ToInt32();
                        break;
 
                    case LB_INSERTSTRING:
                        // 挿入されたときは挿入位置 (WParam) が NewIndex
                        base.WndProc(ref m);
                        m_NewIndex = m.WParam.ToInt32();
                        break;
 
                    case LB_DELETESTRING:
                    case LB_RESETCONTENT:
                        // 削除、クリアされたときは -1 に戻します
                        base.WndProc(ref m);
                        m_NewIndex = -1;
                        break;
 
                    case WM_VSCROLL:
                        // Scroll イベント
                        base.WndProc(ref m);
                        OnScroll(EventArgs.Empty);
                        break;
 
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }
 
            public int NewIndex
            {
                get { return m_NewIndex; }
            }
 
            public event EventHandler Scroll;
 
            protected virtual void OnScroll(EventArgs e)
            {
                if (Scroll != null) Scroll(this, e);
            }
        }
    }



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-03-05 (火) 12:43:21 (1626d)