我有一个包含 2 列 TableLayoutPanel 的用户控件,并接受命令以动态添加行以显示在单独控件中选择的项目的详细信息。因此,用户将在另一个控件(DataGridView)中选择一行,并在 DataGridView 的 SelectedItemChanged 事件处理程序中清除详细信息控件,然后为新选定项重新生成所有行(可能具有完全不同的详细信息从先前选择的项目中显示)。这在一段时间内效果很好。但是如果我长时间从一个选定的项目移动到另一个,刷新会变得非常慢(每次 3-5 秒)。这听起来好像我没有正确处理所有东西,但我无法弄清楚我错过了什么。这是我清除 TableLayoutPanel 的代码:
private readonly List<Control> controls;
public void Clear()
{
detailTable.Visible = false;
detailTable.SuspendLayout();
SuspendLayout();
detailTable.RowStyles.Clear();
detailTable.Controls.Clear();
DisposeAndClearControls();
detailTable.RowCount = 0;
detailTable.ColumnCount = 2;
}
private void DisposeAndClearControls()
{
foreach (Control control in controls)
{
control.Dispose();
}
controls.Clear();
}
一旦我完成将我想要的所有控件加载到 TableLayoutPanel 中以进行下一个详细显示,这就是我所说的:
public void Render()
{
detailTable.ResumeLayout(false);
detailTable.PerformLayout();
ResumeLayout(false);
detailTable.Visible = true;
}
我在 TableLayoutPanel 中只使用标签(很少使用 TextBox),我在创建它们时将标签和文本框添加到控件列表(在 DisposeAndClearControls() 中引用)。我尝试只是迭代 detailTable.Controls 并以这种方式处理它们,但它似乎错过了一半的控件(通过在调试器中单步执行来确定)。这样我就知道我得到了所有。
我会对提高绘图性能的任何建议感兴趣,尤其是导致多项选择下降的原因。