这个问题与我外包并解决here的问题有关,请考虑那里的代码作为主要解决方案,这是一个小小的补充。

正如问题的评论中所述,我必须添加一定数量的行而不会暂停(与TableLayoutPanel的高度相关),这似乎适用于大多数情况案例(inp.Count是添加的行数):

tableLayoutPanel1.SuspendLayout();

int i;

while ((i = tableLayoutPanel1.Controls.Count) >= 2) {

tableLayoutPanel1.Controls[--i].Dispose();

tableLayoutPanel1.Controls[--i].Dispose();

tableLayoutPanel1.Controls[--i].Dispose();

}

while (tableLayoutPanel1.RowStyles.Count > 0) {

tableLayoutPanel1.RowStyles.RemoveAt(tableLayoutPanel1.RowStyles.Count - 1);

}

tableLayoutPanel1.RowCount = 0;

for(int i=0; i

if (i > inp.Count - 6) {

tableLayoutPanel1.ResumeLayout();

}

//...

}

检查以上链接的解决方案,查看inp.Count不足以修复水平滚动条的情况。

这大大改善了加载时间,但是视觉元素仍然存在滞后,为什么我决定在开头添加tableLayoutPanel1.Hide();并在结尾添加tableLayoutPanel1.Show();。

即使隐藏父控件也不会阻止用户看到行如何消失,同样在再次显示控件之后,在加载内容本身之前首先显示表边框。所以这个解决方案并不完美,但它的工作范围应该足够了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐