如何将 C# ListView 滚动传递给父容器

How to pass C# ListView scroll to parent container

在我的 C# Windows Forms 应用程序中,我有一个包含 System.Windows.Forms.TabPage 的表单,其中包含多个 System.Windows.Forms.ListView。 TabPage 有一个垂直滚动条。

滚动此 TabPage 时,当鼠标悬停在其中一个 ListView 上时,滚动停止。

解决此问题并允许在鼠标悬停在其中一个 ListView 上时继续滚动的最佳方法是什么?

经过一番搜索,这是我的解决方案:

我使用以下代码创建了一个新控件:

using System;
using System.Windows.Forms;

namespace MyApplication.Controls
{
    public class ScrollableListView : ListView
    {
        [System.Runtime.InteropServices.DllImport("User32.dll")]
        public static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

        protected override void WndProc(ref Message m)
        {
            const int WM_MOUSEWHEEL = 0x020A;
            switch (m.Msg)
            {
                case WM_MOUSEWHEEL:
                    if (m.HWnd == Handle)
                    {
                        if (Parent is TabPage)
                            PostMessage((Parent as TabPage).Handle, m.Msg, m.WParam, m.LParam);
                    }
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
    }
}

当在此控件上使用鼠标滚轮时,如果父控件是 System.Windows.Forms.TabPage.

,则事件将发送到父控件