zoukankan      html  css  js  c++  java
  • c#自定义液晶数字控件

    c#自定义液晶数字控件

     

    项目中经常与硬件打交道,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://files.cnblogs.com/feiyangqingyun/myAlarmSystem20130527.zip

  • 相关阅读:
    CnForums1.0 Alpha 开始试运行
    asp.net Forums2.0修改密码后无法登陆问题——都是Cache惹的祸
    CnForums1.0 Alpha RC1 发布
    Docker: Nvidia Driver, Nvidia Docker 推荐安装步骤
    Docker: docker pull, wget, curl, git clone 等如何更快?
    DL4J实战之三:经典卷积实例(LeNet5)
    纯净Ubuntu16安装CUDA(9.1)和cuDNN
    DL4J实战之四:经典卷积实例(GPU版本)
    JAVA 中静态块、静态变量加载顺序详解
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/Alex80/p/5081900.html
Copyright © 2011-2022 走看看