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

时间:2017-05-19 03:37:42

标签: c# winforms

我的TableLayoutPanel autoscroll设置为falseanchor设置为topleft。它的父级是Panelautoscroll设置为true

TableLayoutPanel一直在使用动态控件进行填充。

当控件很少时,滚动本身效果很好,只有几百个。但是,当我越来越多地控制滚动降级的性能时,有时会冻结我的PC。

基本上,当我点击垂直Scrollbar时,它会触发无限量的ThumbPosition条消息。

我的计划的一部分

Part of my program

使用面板上的Scroll事件,而不是tablelayoutpanel,我可以捕获一些用户事件,例如LargeDecrementThumbTrackThumbPosition等,但我不能看到EndScroll被触发哪个是我想要的。或者至少我要取消ThumbPosition上的滚动。

    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);
}

我认为问题在于,由于它有如此多的动态控件,并且事件连续如此迅速地触发,因此它会挂起来绘制它。 所以任何想法停止滚动某些事件并让其他事件滚动?

0 个答案:

没有答案