ga('set', 'anonymizeIp', 1);
Categories: C#Coding

[C#] 讓Panel控件支援滑鼠滾輪(Mouse wheel)事件

Share

視窗程式設計中,有時候會創建許多panel來容納資料,當資料太多時會使用到scroll bar,但panel是不支援滑鼠滾輪事件的。

本文演示如何讓panel也能支援滑鼠滾輪事件。

首先你的Panel的AutoScroll屬性必須要設為True。

實作以下步驟:

  1. IMessageFilter
  2. PreFilterMessage method
  3. 在Form中建構函式加入功能
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

Form class中繼承&添加的程式碼如下:

namespace yournamespace
{
    public partial class Form1:Form, IMessageFilter
    {
        [DllImport("user32.dll"]
        private static extern IntPtr WindowFromPoint(Point pt);
        [DllImport("user32.dll"]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    }
    
    public Form1()
    {
        InitializeComponent();
        Application.AddMessageFilter(this);
    }

    public bool PreFilterMessage(ref Message e)
    {
        if (m.Msg == 0x20a)
        {
            Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);
            IntPtr hWnd = WindowFromPoint(pos);
            if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null)
            {
                SendMessage(hWnd, m.Msg, m.WParam, m.LParam);
                return true;
            }
        }
        return false;
    }
}

如此一來,只要有AutoScroll屬性為True的控件,都會有效。

Jys

Published by
Jys

Recent Posts

[python] Flask Create RESTful API

This article gi... Read More

3 年 前發表

[Javascript] 新增/刪除JSON中key值

在web訊息交換常會需要對JS... Read More

3 年 前發表

[JAVA] SQL Server Connection

本文介紹JAVA連線SQL s... Read More

3 年 前發表