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在网格中容纳多个控件。。。。