C# 为什么我的tablelayoutpanel滚动速度慢?
我已经创建了一个表单并添加了一个TableLayoutPanel(两者都是在代码中生成的)。面板有2000行,面板有一个滚动条。当我运行应用程序时,它在显示表单时冻结。当我只添加1700行时,它会显示表单,当快速向下滚动时,程序会在刷新表单内容之前冻结几秒钟。向面板添加线时,我使用SuspendLayout和ResumeLayout。我做错了什么?守则的一部分:C# 为什么我的tablelayoutpanel滚动速度慢?,c#,tablelayoutpanel,C#,Tablelayoutpanel,我已经创建了一个表单并添加了一个TableLayoutPanel(两者都是在代码中生成的)。面板有2000行,面板有一个滚动条。当我运行应用程序时,它在显示表单时冻结。当我只添加1700行时,它会显示表单,当快速向下滚动时,程序会在刷新表单内容之前冻结几秒钟。向面板添加线时,我使用SuspendLayout和ResumeLayout。我做错了什么?守则的一部分: using System; using System.Windows.Forms; using System.Drawing; na
using System;
using System.Windows.Forms;
using System.Drawing;
namespace xxx
{
partial class xxx
{
public int showForm()
{
Form unusedTableForm = new Form();
unusedTableForm.Text = "Unused IOs";
unusedTableForm.AutoScroll = true;
unusedTableForm.AutoSize = true;
unusedTableForm.MaximizeBox = false;
unusedTableForm.MinimizeBox = false;
unusedTableForm.FormBorderStyle = FormBorderStyle.Fixed3D;
unusedTableForm.StartPosition = FormStartPosition.Manual;
unusedTableForm.Location = new Point(20, 20);
unusedTableForm.TopMost = true;
unusedTableForm.VerticalScroll.SmallChange = 300;
TableLayoutPanel unusedTable = new TableLayoutPanel();
unusedTable.RowCount = 1; // +1 for header
unusedTable.ColumnCount = 3;
unusedTable.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
unusedTable.AutoSize = true;
unusedTable.RowCount = 2000;
for (i = 0; i < unusedTable.ColumnCount; i++)
{
unusedTable.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
}
for (i = 0; i < unusedTable.RowCount; i++)
{
unusedTable.RowStyles.Add(new RowStyle(SizeType.AutoSize));
}
// create labels for each cell here
unusedTable.SuspendLayout(); // to make it fast
// add labels into cells here
unusedTable.ResumeLayout();
unusedTableForm.Controls.Add(unusedTable);
if (unusedTableForm.Height > 900)
{
unusedTableForm.Width = unusedTable.Width + 50;
unusedTableForm.Height = 920;
unusedTableForm.AutoSize = false;
unusedTable.Height = 900;
}
unusedTableForm.ShowDialog(); // it freezes here with timeout
}
}
}
使用系统;
使用System.Windows.Forms;
使用系统图;
名称空间xxx
{
部分类xxx
{
公共int showForm()
{
Form unusedTableForm=新表单();
unusedTableForm.Text=“未使用的IOs”;
unusedTableForm.AutoScroll=true;
unusedTableForm.AutoSize=true;
unusedTableForm.MaximizeBox=false;
unusedTableForm.MinimizeBox=false;
unusedTableForm.FormBorderStyle=FormBorderStyle.Fixed3D;
unusedTableForm.StartPosition=FormStartPosition.Manual;
位置=新点(20,20);
unusedTableForm.TopMost=true;
unusedTableForm.VerticalScroll.SmallChange=300;
TableLayoutPanel unusedTable=新建TableLayoutPanel();
unusedTable.RowCount=1;标头为//+1
unusedTable.ColumnCount=3;
unusedTable.CellBorderStyle=表格布局面板CellBorderStyle.Single;
unusedTable.AutoSize=true;
unusedTable.RowCount=2000;
对于(i=0;i900)
{
unusedTableForm.Width=unusedTable.Width+50;
未使用表格。高度=920;
unusedTableForm.AutoSize=false;
无法使用。高度=900;
}
unusedTableForm.ShowDialog();//它在这里冻结并超时
}
}
}
WinForms不喜欢太多控件。DataGridView更合适。LarsTech是正确的。此外,如果您有许多行,请不要对RowStyle
使用AutoSize
。但是DataGridView
会更大。WinForms不喜欢太多控件。DataGridView更合适。LarsTech是正确的。此外,如果您有许多行,请不要对RowStyle
使用AutoSize
。但是DataGridView
会更大。