博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#自定义液晶数字控件
阅读量:6481 次
发布时间:2019-06-23

本文共 1981 字,大约阅读时间需要 6 分钟。

 

项目中经常与硬件打交道,LED显示屏上面的液晶数字很好看,QT中直接就有数码管这个控件,C#中自己来写一个,其实掌握了一种自定义控件的写法,其他的都是浮云,举一反三,最笨的自定义控件无非就是准备好精美的图片,然后双缓冲根据条件绘制到界面上,将手机QQ和金山毒霸手机版下载写来,拓展名改为rar,解压出来,在 res文件夹下面可以看到所有使用的资源,直接拿过来用咯。其实手机软件大部分效果都是绘制图片+文字而成的。

效果图:一个动态的液晶时钟

 

步骤1:

准备0-9十张图片

                   

添加到项目资源里面。

步骤2:

新建用户控件myButtonNumber,构造函数里面设置双缓冲。

public myButtonNumber()

        {

            InitializeComponent();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

            this.SetStyle(ControlStyles.DoubleBuffer, true);

            this.SetStyle(ControlStyles.ResizeRedraw, true);

            this.SetStyle(ControlStyles.Selectable, true);

            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

            this.SetStyle(ControlStyles.UserPaint, true);

            this.BackColor = Color.Transparent;

            this.Size = new Size(39, 68);

        }

步骤3:

增加属性Number,这样的话可以在属性栏里面找到并赋值。

int number = 0;

        public int Number

        {

            set 

            {

                if (value < 0 || value > 9) { number = 0; } else { number = value; }

                this.Invalidate(); 

            }

            get { return number; }

        }

 

步骤4:

重写OnPaint事件(绝大部分自定义控件都需要重写这个事件)

 

        protected override void OnPaint(PaintEventArgs e)

        {           

            Graphics g = e.Graphics;

            Rectangle rec = new Rectangle(0, 0, this.Size.Width, this.Size.Height);

 

            switch (number)

            {

                case 0: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_0, rec); break;

                case 1: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_1, rec); break;

                case 2: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_2, rec); break;

                case 3: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_3, rec); break;

                case 4: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_4, rec); break;

                case 5: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_5, rec); break;

                case 6: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_6, rec); break;

                case 7: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_7, rec); break;

                case 8: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_8, rec); break;

                case 9: g.DrawImage(global::myAlarmSystem.Properties.Resources.number_9, rec); break;

            }

        }

 

 代码下载:

转载地址:http://mdfuo.baihongyu.com/

你可能感兴趣的文章
System Center 2012 SP1 Data Protection Manager 防止重复备份数据
查看>>
读书-算法《程序设计导引及在线实践》-简单计算题3:校门外的树
查看>>
MFC下的网络编程(1)CAsyncSocket进行无连接(UDP)通信
查看>>
php-jquery-json-3
查看>>
前后端分离djangorestframework——ContentType组件表
查看>>
consul UI用127可以访问,指定ip无法访问
查看>>
【转】c++析构函数(Destructor)
查看>>
Android_Drawable Bitmap Canvas Paint之间区别[转]
查看>>
正确认识和使用鲁班尺
查看>>
Linux学习之常用网络通信命令与shell简单应用技巧(四)
查看>>
阅读计数功能实现
查看>>
Python-递归实现
查看>>
webbench压力性能测试
查看>>
java StrutsTypeConverter的使用
查看>>
取出重复的客运车班次,两个字段的值互换视为重复值
查看>>
Android O编译前修改文件和目录权限
查看>>
n!素因子p的幂 swjtuOJ 2090【数论】
查看>>
UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-13串口功能调试
查看>>
设计模式状态
查看>>
day44-Celery异步分布式
查看>>