【C#】Winform 令人困擾的畫面閃爍問題解法
DoubleBuffered = true
如果 Control 沒有這個屬性,可以使用我下列擴充函式進行設定︰
public static void SetDoubleBuffered<T>(this T control) where T : Control
{
typeof(T).InvokeMember(
"DoubleBuffered",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
null,
control,
new object[] { true });
}
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 令人困擾的畫面閃爍問題解法的更多相关文章
- MSVC與CRT的恩怨情仇
很久沒有寫程式設計入門知識的相關文章了,這篇文章要來談談程式庫 (Library) 連結,以及關於 MSVC 與 CRT 之間的種種恩怨情仇. 如果你使用的作業系統是 Linux.Mac 或其他非 W ...
- Samba编码设置方法
弟管理學校的網頁伺服器,該伺服器也同時是大家的分享檔案集散中心,是以Linux架設起來的,該伺服器以 Unicode 作為系統編碼,而其他Windows系統則是big5(MS950)編碼,最近我要讓另 ...
- [WinForm] 使用 WebBrowser 操作 HTML 頁面的 Element-摘自网络
前言 在 Window Form 應用程式如果需要瀏覽網頁時可以崁入 WebBrowser 控制項,但如果需要操作崁入的 HTML 的網頁元素,就需要額外的操作,以下紀錄幾種操作 HTML 元素的方法 ...
- 解决WinForm界面闪烁问题
前言 之前將.net 1.1 Windows Form程式升級到.net 4.0,結果在開畫面時,閃的非常利害! 於是就開始找解決方法. 研究及解決 開始找到了設定DoubleBuffer=true ...
- CSS製作動畫效果(Transition、Animation、Transform)
CSS 2D Transforms https://www.w3schools.com/css/css3_2dtransforms.asp CSS 3D Transforms https://www. ...
- mootools vs jquery
大部分最近才剛接觸JavaScript的人會面臨到的困難是該選擇哪個套件(library)或是該先學哪個套件.如果你在一間公司裡上班,那麼可能公司已經有一套固定使用的套件,若是在這種情況下,問題就沒那 ...
- 超时空英雄传说2复仇魔神完全攻略&秘技
╓─╥───────────────────────────────────────────────────╥─╖ ║ ║ 超 時 空 英 雄 傳 說 2 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...
- 鸟哥的linux私房菜---非常好的linux基础网址【转】
转自:http://linux.vbird.org/linux_basic/0320bash.php 在 Linux 的環境下,如果你不懂 bash 是什麼,那麼其他的東西就不用學了!因為前面幾章我們 ...
- Linux常用到的指令汇总
Linux常用到的指令汇总 根据鸟哥linux私房菜上定义的:一定要先學會的指令:ls, more, cd, pwd, rpm, ifconfig, find 登入與登出(開機與關機):telnet, ...
随机推荐
- Python从零开始——数值类型
- 其他综合-CentOS 7 命令行显示优化
CentOS 7 命令行显示优化 1.实验描述 通过 CentOS 7.6 的显示优化,为实现命令行显示提供良好视觉体验. [基于此文章的环境]点我快速打开文章 2.实验环境 使用软件的版本:VMwa ...
- linux关闭ACPI电源管理模块
一.运行环境 # cat /etc/redhat-release CentOS release 6.2 (Final) # uname -a Linux web-server- -.el6.x86_6 ...
- windows删除桌面右键“英特尔@显卡设置”
运行中输入:regedit 确认运行注册表编辑器,依次单击展开 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers键 ...
- 使用类似GeoJson的数据生成物体(建筑等)的功能逻辑
GeoJson作为一种模型传输格式, 用的最多的就是地图里面的各种简单模型了, 比如下图中很贴切的俄罗斯方块楼: 它的格式大概就是下面这样: { "type": "Fea ...
- linux 环境下 apache tomcat 安装jenkins
参考文档: https://blog.51cto.com/12629984/1980034 https://www.cnblogs.com/lxs1314/p/8567652.html https:/ ...
- 201871010121-王方-《面向对象(java)程序设计对象》第十周学习总结
王方第九周Java实验总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- Spring Boot 配置文件application.properties
#########COMMON SPRING BOOT PROPERTIES ######========CORE PROPERTIES=========== #SPRING CONFIG (Conf ...
- java执行hive命令或者脚本
java执行脚本 import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import ja ...
- 弗洛伊德算法(Floyd )
package com.rao.graph; /** * @author Srao * @className Floyd * @date 2019/12/11 18:43 * @package com ...