C#Winforms如何覆盖滚动事件?

C#Winforms如何覆盖滚动事件?,c#,winforms,C#,Winforms,我有一个TableLayoutPanel,其中autoscroll设置为false,锚定到左上方。它的父级是一个面板,其中自动滚动设置为true TableLayoutPanel始终使用动态控件填充 只有几百个控件时,滚动本身工作得非常好。然而,当我得到越来越多的控制滚动性能降级,有时它冻结我的电脑 基本上,当我点击垂直的滚动条时,它会触发无限量的拇指位置消息 我节目的一部分 使用面板上的Scroll事件,而不是tablelayoutpanel,我可以捕获一些用户事件,如LargeDecrem

我有一个
TableLayoutPanel
,其中
autoscroll
设置为
false
锚定到
左上方
。它的父级是一个
面板
,其中
自动滚动
设置为
true

TableLayoutPanel
始终使用动态控件填充

只有几百个控件时,滚动本身工作得非常好。然而,当我得到越来越多的控制滚动性能降级,有时它冻结我的电脑

基本上,当我点击垂直的
滚动条
时,它会触发无限量的
拇指位置
消息

我节目的一部分

使用面板上的
Scroll
事件,而不是tablelayoutpanel,我可以捕获一些用户事件,如
LargeDecrement
ThumbTrack
ThumbPosition
等,但我看不到正在触发我想要的
EndScroll
。或者至少我想取消在
拇指位置上的滚动

    private void FormaDinámicaGrisG_Scroll(object sender, ScrollEventArgs e)
    {
        MessageBox.Show(e.Type + "");
        if (e.Type == ScrollEventType.ThumbPosition)
        {
            //I want to prevent scrolling here
        }
        else
        {
            // Here I want to let it scroll.
        }
       
    }
当用户滚动时,我尝试使用以下代码捕获消息,但什么也没发生

private const int WM_VSCROLL = 0x0115;
private const int WM_HSCROLL = 0x0114;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_VSCROLL)
    {
        MessageBox.Show("Vertical Scroll");
    }
    if (m.Msg == WM_HSCROLL)
    {
        MessageBox.Show("HorzScroll");
    }

    base.WndProc(ref m);
}
我认为问题在于,由于它有如此多的动态控件,而且事件连续触发的速度如此之快,所以它只能挂在绘图上。
因此,有没有停止滚动某些事件而让其他事件滚动的想法?

唯一好的建议是扔掉它。使用TLP实现网格控制从来都不是一个严重的错误。改用网格控件,比如哪一个。例如,使用DataGridView?当我设计这个时,我看到人们使用TableLayoutPanel在网格中容纳多个控件。。。。