方法一:
C#的FlowlayoutPanel添加一定數據量的控件后就會空白,通過虛擬列表方式可以解決這個問題。
1、創建一個包含ScrollPanel和滾動條的用戶控件,定義一個List,添加控件時,都添加到這個List中。
2、拖動滾動條時,計算出要顯示的控件,清空之前的控件,將要顯示的控件從List中取出加入Controls中。
這樣同時顯示的控件不超過10個,速度就很快。
方法二:
平時顯示時使用繪制,而不是直接創建控件,所有的控件都實時計算生成,當需要編輯時才創建控件,這種方法比較繁瑣。
使用方法一實現的100w個控件顯示(拖動起來很流暢)
因為是基於DotNetBar做的,只貼出關鍵代碼,
List<Control> visibleItemList = GetVisibleControlList();
if (visibleItemList.Count > 0)
{
ScrollBar.Maximum = visibleItemList.Count - 1;
var elementCount = ScrollBar.Maximum -ScrollBar.Value < 10 ? ScrollBar.Maximum - ScrollBar.Value + 1 : 10;
Panel.Controls.AddRange(visibleItemList.GetRange(ScrollBar.Value, elementCount).ToArray());
}
else
{
ScrollBar.Maximum = 0;
}
