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文档文件,生成///

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

多线程调用:

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

透明度:

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

Design属性:

ToolboxItem
有时候是控件的Designer部分没有写好,不想别人一引用DLL就出现控件 可以设置:

这样用户控件就自动隐藏了,不出现在工具箱中。

ToolboxBitmap
让用户控件在工具箱中显示不同的图标:

这样用户控件使用的图标是Panel的图标。
如果不用系统的图标,而使用自己的图标,可以这样

不过,一定要注意路径,WindowsApplication1.Images.MyOKL.bmp表示,解决方案是WindowsApplication1,目录是Images,文件名是MyOKL.bmp,同时,这个图片必须是”Resources嵌入的资源

Category与Description

经常一起的属性,Category表示类型,如属性框中所显示的外观,布局等分类,当然,你可以自己的”自定义属性”,而Description就是这个属性的描述,用来说明属性有什么用途。这两个的设置相对都比较简单,可以说,一看就知道,不过提一下,Appearance是将出现在属性面板中,外观一栏。

DefaultValue

用于设置默认的值,对于string,bool,int,可以直接写出来:

这是可以的,不过,不是这三种类型的话,就比较麻烦,一定要先转化为string才能设置成功。如上面的DarkGray,这是系统定义的颜色,这还是比较好处理的。不过,如果是一些自定义的颜色,如颜色是128,0,128,你应该将128转为16进制,写成0x800080,前缀0x是一定要加的。最后就这样

Browsable
表示是否在属性面板中显示这个属性

表示,将在属性面板中显示这个属性。

DesignerSerializationVisibility
表示,是否在*.Designer.cs文件中将设置的代码写出来,也就是是否要实现序列化
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
表示需要实现序列化。

自动判断 中文 中文(简体) 中文(香港) 中文(繁体) 英语 日语 朝鲜语 德语 法语 俄语 泰语 南非语 阿拉伯语 阿塞拜疆语 比利时语 保加利亚语 加泰隆语 捷克语 威尔士语 丹麦语 第维埃语 希腊语 世界语 西班牙语 爱沙尼亚语 巴士克语 法斯语 芬兰语 法罗语 加里西亚语 古吉拉特语 希伯来语 印地语 克罗地亚语 匈牙利语 亚美尼亚语 印度尼西亚语 冰岛语 意大利语 格鲁吉亚语 哈萨克语 卡纳拉语 孔卡尼语 吉尔吉斯语 立陶宛语 拉脱维亚语 毛利语 马其顿语 蒙古语 马拉地语 马来语 马耳他语 挪威语(伯克梅尔) 荷兰语 北梭托语 旁遮普语 波兰语 葡萄牙语 克丘亚语 罗马尼亚语 梵文 北萨摩斯语 斯洛伐克语 斯洛文尼亚语 阿尔巴尼亚语 瑞典语 斯瓦希里语 叙利亚语 泰米尔语 泰卢固语 塔加路语 茨瓦纳语 土耳其语 宗加语 鞑靼语 乌克兰语 乌都语 乌兹别克语 越南语 班图语 祖鲁语 自动选择 中文 中文(简体) 中文(香港) 中文(繁体) 英语 日语 朝鲜语 德语 法语 俄语 泰语 南非语 阿拉伯语 阿塞拜疆语 比利时语 保加利亚语 加泰隆语 捷克语 威尔士语 丹麦语 第维埃语 希腊语 世界语 西班牙语 爱沙尼亚语 巴士克语 法斯语 芬兰语 法罗语 加里西亚语 古吉拉特语 希伯来语 印地语 克罗地亚语 匈牙利语 亚美尼亚语 印度尼西亚语 冰岛语 意大利语 格鲁吉亚语 哈萨克语 卡纳拉语 孔卡尼语 吉尔吉斯语 立陶宛语 拉脱维亚语 毛利语 马其顿语 蒙古语 马拉地语 马来语 马耳他语 挪威语(伯克梅尔) 荷兰语 北梭托语 旁遮普语 波兰语 葡萄牙语 克丘亚语 罗马尼亚语 梵文 北萨摩斯语 斯洛伐克语 斯洛文尼亚语 阿尔巴尼亚语 瑞典语 斯瓦希里语 叙利亚语 泰米尔语 泰卢固语 塔加路语 茨瓦纳语 土耳其语 宗加语 鞑靼语 乌克兰语 乌都语 乌兹别克语 越南语 班图语 祖鲁语 有道翻译 百度翻译 谷歌翻译 谷歌翻译(国内) 翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 译

Original: https://www.cnblogs.com/zeroone/p/12432833.html
Author: 武胜-阿伟
Title: winform 控件开发

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554416/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mysql InnoDB多版本并发控制MVCC

    参考书籍《mysql是怎&…

    技术杂谈 2023年7月25日
    0106
  • SETTLE约束算法中的坐标变换问题

    技术背景 在之前的两篇文章中,我们分别讲解了SETTLE算法的原理和基本实现和SETTLE约束算法的批量化处理。SETTLE约束算法在水分子体系中经常被用到,该约束算法具有速度快、…

    技术杂谈 2023年7月25日
    065
  • 正则表达式规则与语法

    正则表达式(regular expression)就是用一个”字符串”来描述一个特征,然后去验证另一个”字符串”是否符合这个特征。比…

    技术杂谈 2023年5月31日
    0117
  • Nginx平滑升级版本

    Nginx平滑升级版本 一, 查看现目前版本,准备预升级版本的安装包 #查看nginx版本 /usr/local/nginx/sbin/nginx -v #测试nginx访问是否正…

    技术杂谈 2023年7月11日
    095
  • WaterfallTree(瀑布树) 详细技术分析系列

    前言 WaterfallTree(瀑布树) 是最强纯C#开源NoSQL和虚拟文件系统-STSdb专有的(版权所有/专利)算法/存储结构。 参考 关于STSdb,我之前写过几篇文章,…

    技术杂谈 2023年5月31日
    094
  • Vue 模板语法

    Vue.js使用基于HTML的模板语法,允许开发者声明式地将DOM绑定至地层Vue实例的数据. 所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解…

    技术杂谈 2023年7月11日
    053
  • 基于Sikuli GUI图像识别框架的PC客户端自动化测试实践

    写在前面 最近两天,公司有个PC客户端的测试任务,除了最基础的功能测试外,还包括稳定性测试和兼容性测试需求。刚好去年接触过Sikuli这款基于GUI图像识别框架的自动化测试工具,于…

    技术杂谈 2023年7月25日
    071
  • WordPress网站中添加百度统计代码

    百度统计是流量分析平台,帮助收集网站访问数据,提供流量趋势、来源分析、转化跟踪、页面热力图、访问流等多种统计分析服务,同时与百度搜索、百度推广、云服务无缝结合,为网站的精细化运营决…

    技术杂谈 2023年7月11日
    093
  • JSP和servlet之间的相互传值

    1.从一个jsp页面跳转到另一个jsp页面时的参数传递(1)使用request对象获取客户端提交的信息login.jsp页面代码如下: 点击查看代码 <%@ page lan…

    技术杂谈 2023年7月24日
    065
  • Failed to get D-Bus connection: Operation not permitted

    学docker时,使用 systemctl命令报错: Failed to get D-Bus connection: Operation not permitted 网上查询发现是…

    技术杂谈 2023年7月24日
    075
  • 服务治理-布隆过滤器

    布隆过滤器 布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。元素可以添加到集合中,但不能删除(计数布鲁姆过…

    技术杂谈 2023年7月11日
    081
  • PreparedStatement报错问题

    package com.lian.lesson3; import com.lian.lesson2.utils.JDBCUtils; import java.sql.*; publ…

    技术杂谈 2023年6月21日
    089
  • crash命令 —— foreach

    参考:https://crash-utility.github.io/help_pages/foreach.html 用法: 在所有的进程上执行命令 这里的命令支持如下: 命令 可…

    技术杂谈 2023年5月30日
    099
  • 如何关闭consul的图形化界面

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    087
  • nginx 安装配置及使用 启动权限拒绝问题

    安装 yum install -y nginx 查看安装的路径 whereis nginx 可能会有所不同 需要根据自己的查看 执行目录:/usr/sbin/nginx模块所在目录…

    技术杂谈 2023年7月11日
    093
  • JWT基础概念详解

    JWT基础概念详解 JWT介绍 之前我们文章讲过分布式session如何存储,其中就讲到过Token、JWT。首先,我们来回顾一下使用Token进行身份认证。 客户端发送登录请求到…

    技术杂谈 2023年6月21日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球