【问题标题】:C# Why use SuspendLayout()?C# 为什么使用 SuspendLayout()?
【发布时间】:2010-10-01 10:22:32
【问题描述】:

我正在阅读有关 SuspendLayout()ResumeLayout() 的信息。我想不通的是,我为什么要这样做/使用它。我知道您在运行时将控件添加到控件容器时会使用它。

这与设置DockAnchorLocation等属性有关。

但我不明白 Suspend- 和 ResumeLayout() 的附加价值是什么。这些方法有什么用?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    基本上,如果您想调整多个与布局相关的属性 - 或添加多个子级 - 但要避免布局系统重复对您的更改做出反应。您希望它在一切“准备就绪”时在最后执行布局。

    【讨论】:

    • 我还是不明白SuspendLayout() 做了什么。我的意思是为什么要使用SuspendLayout()你也可以不使用SuspendLayout()来设置这些属性。
    • @Martijn:是的,你可以设置它们......布局系统会浪费时间(并且可能使屏幕看起来很难看)在你设置各种属性时更改布局 - 而不是当您完成所有设置后执行它一次。假设您有一个试图平均分配空间的复杂布局,并且您要添加 100 个项目...您是否真的希望它在添加第一个项目后解决该空间,然后在您添加第二个之后,然后在您添加第三个等之后?
    • 正如 Jon Skeet 所写:当您设置 multipl 属性(或在 gridview 中插入多行)时,屏幕不会因每次更改而刷新,仅在调用 ResumeLayout 时才会刷新。节省性能和奇怪的屏幕闪烁。
    • @Mario:那么,您建议如果在gridview 中插入多行,您应该使用SuspendLayout() 来确保行可见? BindingList 是否也在后台执行此操作?
    • @Martijn:我会使用 SuspendLayout(),但不是为了确保它们可见,而是为了 (a) 节省一些性能,因为每次操作后屏幕都不会刷新 (b) 以避免不必要的屏幕上的活动,如闪烁左右。 BindingList 是如何处理这个问题的,我不知道,抱歉(因为我确实出于其他原因避免了自动数据绑定)。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2014-03-04
    • 2021-05-21
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多