我的TableLayoutPanel
autoscroll
设置为false
,anchor
设置为topleft
。它的父级是Panel
,autoscroll
设置为true
。
TableLayoutPanel
一直在使用动态控件进行填充。
当控件很少时,滚动本身效果很好,只有几百个。但是,当我越来越多地控制滚动降级的性能时,有时会冻结我的PC。
基本上,当我点击垂直Scrollbar
时,它会触发无限量的ThumbPosition
条消息。
我的计划的一部分
使用面板上的Scroll
事件,而不是tablelayoutpanel,我可以捕获一些用户事件,例如LargeDecrement
,ThumbTrack
,ThumbPosition
等,但我不能看到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);
}
我认为问题在于,由于它有如此多的动态控件,并且事件连续如此迅速地触发,因此它会挂起来绘制它。 所以任何想法停止滚动某些事件并让其他事件滚动?