日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载

發布時間:2024/10/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

通常我們在設置子控件的一些與外觀、布局有關的屬性時,比如Size、Location、Anchor或Dock等,會激發子控件的 Layout事件,并可能會引起窗口重繪。當子控件較多時,如果頻繁設置上述屬性(例如在窗體的初始化代碼中),多個子控件的Layout事件會引起窗口重繪效率問題,比如閃爍。特別地,通過動態加載插件生成的UI對象特別多時,閃爍的情況就特別嚴重。那么怎么解決這個問題呢?

解決

這時,通過使用控件的SuspendLayout方法,可以將控件的布局暫時掛起,其后的代碼中將會把子控件的Layout事件暫時掛起,只是把相應屬性的值設置為新值,并不激發Layout事件,待調用ResumeLayout方法后,再一起使子控件的Layout事件生效。當需要立即執行布局事件時,可以直接調用PerformLayout方法。

Q&A

1.什么時候會觸發Control.Layout事件?
(1)當控件本身的大小(Size)改變時會觸發本控件的Layout事件

(2)當其子控件的位置(Location)改變時會觸發它的Layout事件。

(3)添加或刪除子控件也會引起它的Layout事件。

(4)發生其他可影響控件布局的變化時會引起它的Layout事件。
2.SuspendLayout方法作何用?
在添加或移除子控件,控件的邊界改變,以及在發生其他可影響控件布局的變化時,會發生 Layout 事件??梢允褂肧uspendLayout掛起布局,可以在控件上執行多個操作,而無需為每次更改執行一次布局操作。也就是說,有了這個語句之后,緊接著下面的添加刪除子控件,或者改變子控件的大小、位置及改變它自身的位置的這些操作,都不在引發Layout事件了。
3. ResumeLayout方法作何用?

通過ResumeLayout方法可以取消掛起的布局。以后布局改變的時候就會引發Layout事件了。
4. PerformLayout方法作何用?

ResumeLayout方法可以取消掛起的布局,使以后的布局均有效,但是并不能保證布局的立即執行。如果要使布局立即執行(即立即觸發Layout事件),可以調用PerformLayout方法強制布局,強制控件將布局邏輯應用于自身及其子控件。

C#窗體設計器生成的代碼

/// <summary> /// 設計器支持所需的方法 - 不要 /// 使用代碼編輯器修改此方法的內容。 /// </summary> private void InitializeComponent() { this.panel1.SuspendLayout(); this.SuspendLayout();......//這里設置控件屬性 ......//這里設置控件屬性 this.panel1.ResumeLayout(false); this.ResumeLayout(false); }

從代碼中可以看出,窗體設計器自動生成代碼時也是在大規模改變控件屬性(這些屬性會決定控件布局)的時候使用到了控件的PerformLayout與ResumeLayout方法來提高重繪效率,減少閃爍。

轉載于:https://www.cnblogs.com/vaevvaev/p/7235341.html

總結

以上是生活随笔為你收集整理的WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。