我目前正在开发一个程序,该程序使用相当复杂的嵌套winform控件结构,这些控件会随着用户做出某些选择而动态变化。要更详细地了解控件的具体布局,对于这个问题来说太过广泛了。每当做出选择时,都会对由用户控件控制的基础模型进行大量更新。然后,这会导致所显示控件的大小/位置/可见性发生一系列相应的变化。所有这些变化都会导致屏幕上的控件出现令人痛苦的强烈闪烁。我需要以某种方式解决此问题,以便每次用户进行选择时,屏幕基本上会卡住,直到所有控件更新完成。我尝试在许多不同的地方和方式中使用Control.SuspendLayout/Control.ResumeLayout方法,但我无法消除疯狂的闪烁
找不到关于此的任何信息。我的控件呈现速度非常慢,我注意到在进行重大更新时我没有调用SuspendLayout。我怀疑的是,由于顶层控件包含包含其他控件等的控件,在我的顶层控件上调用SuspendLayout也会暂停每个嵌套控件的布局,或者我是否需要为他们每个人调用它吗? 最佳答案 看看这篇MSDN文章-PracticalTipsForBoostingThePerformanceOfWindowsFormsApps.Textfromarticle:RememberthatSuspendLayoutonlypreventsLayoute
我有一个包含一些“自定义控件”的库。本质上,我们有自己的按钮、圆角面板和一些带有一些自定义油漆的组框。尽管OnPaint方法中有“数学”,但控件非常标准。大多数时候,我们所做的只是绘制圆角并向背景添加渐变。我们使用GDI+来做这一切。这些控件没问题(我们的客户认为它们非常漂亮),但是尽管有DoubleBuffer,您还是会看到一些重绘,尤其是当同一个表单上有20++个按钮(例如)时。在加载表单时,您会看到按钮在绘制……这很烦人。我很确定我们的按钮不是地球上最快的东西,但我的问题是:如果双缓冲区“打开”,所有重绘不应该在后台发生并且Windows子系统应该“立即”显示结果“?另一方面,如
我有一个包含一些“自定义控件”的库。本质上,我们有自己的按钮、圆角面板和一些带有一些自定义油漆的组框。尽管OnPaint方法中有“数学”,但控件非常标准。大多数时候,我们所做的只是绘制圆角并向背景添加渐变。我们使用GDI+来做这一切。这些控件没问题(我们的客户认为它们非常漂亮),但是尽管有DoubleBuffer,您还是会看到一些重绘,尤其是当同一个表单上有20++个按钮(例如)时。在加载表单时,您会看到按钮在绘制……这很烦人。我很确定我们的按钮不是地球上最快的东西,但我的问题是:如果双缓冲区“打开”,所有重绘不应该在后台发生并且Windows子系统应该“立即”显示结果“?另一方面,如
我正在阅读有关SuspendLayout()和ResumeLayout()的内容。我想不通的是,我为什么要这样做/使用它。我知道您在运行时将控件添加到控件容器时会用到它。它与设置Dock、Anchor、Location等属性有关但是我不明白Suspend-和ResumeLayout()的附加值是什么。这些方法有什么用? 最佳答案 基本上,如果您想调整多个与布局相关的属性-或添加多个子项-但避免布局系统重复响应您的更改。您希望它仅在最后,当一切都“准备就绪”时执行布局。 关于C#为什么要使