【发布时间】:2012-09-12 18:25:15
【问题描述】:
我有一个包含 56 个复选框的 FlowLayoutPanel。复选框用于三态模式。现在这是有趣的部分。如果复选框未选中,则表示它们未使用并且可以隐藏以便于阅读或阅读。为了隐藏它们,我使用了另一个复选框。当用户单击复选框时,FlowPanel 中所有未使用的复选框都使用 foreach 迭代隐藏。
问题在于,要隐藏它们,foreach 调用 (checkBox.Visible=false) 大约需要 2-3 秒,而显示它们 (checkBox.Visible=true) 需要 0.5 秒。
关于为什么会发生这种情况的任何建议?
private void hideUnusedPinsCheckBoxClick(objest sender, EventArgs e)
{
bool state = !hideUnusedPinsCheckBox.Checked;
foreach(object obj in flowLayoutPanel.Controls)
{
CheckBox cB = (CheckBox)obj;
if(cB.CheckState == CheckState.Unchecked)
cB.Visible=state;
}
}
【问题讨论】:
-
只是一个“元建议”:获取您选择的性能分析器(例如ANTS Performance Profiler)并衡量需要多长时间。
-
我知道将它们隐藏起来比使其可见需要更长的时间。
-
您是否尝试过在
flowLayoutPanel上调用SuspendLayout和ResumeLayout来包装循环? -
@RobertIagar 是的,这就是您在问题标题中已经说明的内容。我的建议是帮助您找出“为什么”。
-
@Damien_The_Unbeliever 确实有效,但这不是问题的答案。
标签: c# winforms performance