【C#】Winform 令人困擾的畫面閃爍問題解法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【C#】Winform 令人困擾的畫面閃爍問題解法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1520字,纯文字阅读大概需要3分钟。
内容图文
DoubleBuffered = true
如果 Control 沒有這個屬性,可以使用我下列擴充函式進行設定︰
public static void SetDoubleBuffered(this Control control, bool enable = true) { typeof(DataGridView).InvokeMember( "DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, control, new object[] { enable }); }
DoubleBuffered 針對 DataGridView 載入大量資料時特別有幫助,所以我通常都這樣使用︰
public class MyGridView : DataGridView { public MyGridView() { this.SetDoubleBuffered(); } }
DataGridView 載入大量資料時,拖拉 scrollbar 比較不會造成畫面閃爍,但對於畫面控制項閃爍沒什麼作用。
解決畫面控制項閃爍
在 Form 裡加入下列屬性 CreateParams,可以有效解決該畫面控制項閃爍的問題發生︰
public partial class MyForm : Form { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } } public MyForm() { InitializeComponent(); } }
不過開啟該屬性時有個缺點,那就是如果是用在 MDI 等多個畫面重疊時,
當關閉當前Form時,當前Form的影像會覆蓋在後面準備顯示出來的Form上面,
必須重新調整畫面Size迫使Form重繪畫面,才能恢復正常,
有鑑於此,必需要監控畫面被激活時,強迫畫面重繪,因此解法如下︰
public partial class MyForm : Form { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } } public MyForm() { InitializeComponent(); // 加入下面這行迫使該畫面被啟用時重繪畫面控制項 this.Activated += (sender, e) => { Invalidate(); }; } }
Thank you for your time.
内容总结
以上是互联网集市为您收集整理的【C#】Winform 令人困擾的畫面閃爍問題解法全部内容,希望文章能够帮你解决【C#】Winform 令人困擾的畫面閃爍問題解法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。