C# 为什么我的tablelayoutpanel滚动速度慢?

C# 为什么我的tablelayoutpanel滚动速度慢?,c#,tablelayoutpanel,C#,Tablelayoutpanel,我已经创建了一个表单并添加了一个TableLayoutPanel(两者都是在代码中生成的)。面板有2000行,面板有一个滚动条。当我运行应用程序时,它在显示表单时冻结。当我只添加1700行时,它会显示表单,当快速向下滚动时,程序会在刷新表单内容之前冻结几秒钟。向面板添加线时,我使用SuspendLayout和ResumeLayout。我做错了什么?守则的一部分: using System; using System.Windows.Forms; using System.Drawing; na

我已经创建了一个表单并添加了一个TableLayoutPanel(两者都是在代码中生成的)。面板有2000行,面板有一个滚动条。当我运行应用程序时,它在显示表单时冻结。当我只添加1700行时,它会显示表单,当快速向下滚动时,程序会在刷新表单内容之前冻结几秒钟。向面板添加线时,我使用SuspendLayout和ResumeLayout。我做错了什么?守则的一部分:

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
会更大。