繁体   English   中英

SuspendLayout和BeginUpdate之间的区别

[英]Difference between SuspendLayout and BeginUpdate

我没有找到一个很好的解释,实际上两个方法Control.SuspendLayoutBeginUpdate (通常见于列表控件,如ListViewComboBoxListBox等)之间的潜在差异,除了它们都提高了性能。

据我所知:

  1. 他们都暂停绘图,直到所有要显示的项目都被加载,然后重新绘制。

  2. 通常在将控件添加到PanelGroupBox等容器控件时调用SuspendLayout ,而BeginUpdate用于向列表控件(如ListBox添加对象等非控件项。

但是,当他们这样做时,为什么会有两个电话? 或者他们有什么不同的做法?

类似地,还有ResumeLayoutEndUpdate等价物。

他们没有任何共同之处。 SuspendLayout关闭自动布局,这是由TableLayoutPanel和FlowLayoutPanel等控件使用的类型,以及从Dock,Anchor和AutoSize属性获得的布局更新。 它对ListView,ComboBox或ListBox完全没有影响,这些控件不执行布局。 通常只有在批量添加控件到容器时才使用它。 有时,当自动布局使窗口的大小变得太令人讨厌时,您会使用它。 它确实减少了重绘的次数,完全是因为它暂停了控件大小的更新。

BeginUpdate停止控件重绘自身。 这样做 ,当你大量新增项目,对他们不能使用他们的Items.AddRange()方法,因为某些原因使用它就像ListView控件或列表框控件。

正如您所指出的那样, BeginUpdate是列表控件的一部分,在您添加项目时使用。

SuspendLayout类似,但它来自Control类。 当您进行自定义绘制时,它非常有用。

实际上,不同之处在于控件中的控件与绘图项之间的对比。 如果设置与绘图相关的属性 - 请使用SuspendLayout 在添加项目的过程中,使用BeginUpdate

更新

机制有点不同。 在项目添加/删除期间, BeginUpdate抑制绘制事件。 如果您曾尝试调试paint事件,您可能会发现它触发了很多。

SuspendLayout在移动,调整大小等过程中禁止布局计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM