winform 控件开发

避免出现闪烁

1.控件的使用尽量以纯色为主,尽量不使用背景图,或者把大图改成小图,或者图片不缩放绘制,或者直接用不透明的纯色背景色(Winform控件透明是伪透明,是通过截取父容器背景来实现的,所以效率比较低,而且有时候会有延迟。而且多个透明控件叠加的时候不能分层显示出各个控件的透明效果)

2.自定义控件中使用双缓冲。

3.窗体边框最好不要设置为None,保留窗体最大化最小化动画,可以避免最小化恢复时候的界面闪烁。可能会有人说我的窗体是自定义美化的,边框为None了。其实可以通过拦截消息重绘非客户区,实现边框不为None的时候重绘整个窗体的。

 

自定义控件开发:

    1、控件重绘的时候尽可能的处理e.ClipRectangle,减少不必要的绘图操作;

    2、标准重绘都应该在Paint事件里处理,用事件里的e.Graphics。而不是在随便个地方就用CreateGraphics()来绘制

    3、需要刷新的时候调用 Invalidate() 如果能计算重绘区域最好

 

减少闪烁:使用双缓冲,在构造函数里加入这两行代码

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);

或者

DoubleBuffered = true;


项目属性里,生成,选择 XML文档文件,生成///<summary> 代码注释。

到时候把dll给别人用的时候也把Xml带上,放到和dll同一个目录,这样别人开发的时候就有注释提示了

多线程调用:

    多线程操作控件请使用控件的Invoke或者BeginInvoke调用 ,使用线程的时候记得设置线程的 IsBackground=true; 程序关闭之后,线程能自动退出

 this.Invoke(new MethodInvoker(() => {
  //UI操作代码
}));

或者用 async 语法 异步编程

 

透明度:

颜色System.Drawing.Color 这个结构体  是可以支持设置透明度的。可以3个或者4个值,Color.FromArgb(),4个值的时候是 Alpha,Red,Green,Blue. 第一个就是透明度的参数 0-255

 

 

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

winform 控件开发

上一篇:????保护眼睛,从更换win电脑主题开始????


下一篇:C#高级编程第11版 - 第七章