winform容器内动态生成大量控件,需解决拖动时卡顿的问题。
做了一个winform界面,放了一个panel,界面加载时panel内按需要动态生成了很多控件,panel大小超出了窗体范围。
该界面类似某场景全景图,已做好panel鼠标拖动功能,以显示范围外的部分。(另外也做了类似游戏的右下角小地图可拖动矩形选框同步窗体显示范围)。
目前的问题是,拖动panle就要改变Location,改变Location就要重绘窗体内的所有控件,重绘就要闪烁(已解决),用双缓冲不闪烁了拖动过程又变得非常卡顿,查到吐血也没找到好的解决办法(不考虑用wpf)。
想求教:
1.是否有办法在panel不改变Location的情况下,通过改变窗体的显示区域(就好像通过窗户看后面的东西),实现panel的拖动效果?这样一切都不用重绘了。
2.如果1没有办法实现,那有什么办法可以最大程度优化winform窗体,在有大量控件的情况下,拖动、缩放(需重绘)时可以变的流畅,或者有什么办法可以不用重绘。
简单来说,就是在有大量控件的情况下,如何实现流畅的拖动。关键是流畅。
求大神指点!!!
闪烁问题是下面代码解决的:
/// <summary>
/// 重写CreateParams方法
/// 解决控件过多加载闪烁问题
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;//用双缓冲绘制窗口的所有子控件
return cp;
}
}