如何将 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
.
,则事件将发送到父控件
在我的 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
.