自定义控件在C#中不起作用.... [英] Custom control does not work in C#....

查看:134
本文介绍了自定义控件在C#中不起作用....的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个自定义标签控件,显示一个七段数。

当我设置数字值显示它不起作用...

我的代码是 - :

这是自定义控制代码 - >



I want to create a custom label control, which display one seven segment number.
when i set the digit value to display It does not works...
My code is -:
This is custom control code -->

using System.Drawing;
using System.Windows.Forms;

namespace SevenSegmentDigit
{
    public partial class DigitDisplay : Label
    {
        Graphics grx;
        Pen roundPen;
        public DigitDisplay()
        {
            InitializeComponent();
            grx = this.CreateGraphics();
            roundPen = new Pen(Brushes.Black, 2);
            roundPen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            roundPen.EndCap = System.Drawing.Drawing2D.LineCap.Round;
            this.AutoSize=false;            
        }
        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            showDigit();
        }

        private void showDigit()
        {
            grx.Clear(this.BackColor);            
            switch (digitValue)
            {
                case 1:
                    drawOne();
                    break;
                case 2:
                    drawTwo();
                    break;
                case 3:
                    drawThree();
                    break;
                case 4:
                    drawFour();
                    break;
                case 5:
                    drawFive();
                    break;
                case 6:
                    drawSix();
                    break;
                case 7:
                    drawSeven();
                    break;
                case 8:
                    drawEight();
                    break;
                case 9:
                    drawNine();
                    break;
                case 0:
                    drawZero();
                    break;
            };
        }
        public int digitValue = 0;
        public int DisplayDigit
        {
            get { return digitValue; }
            set { digitValue = value; showDigit(); }
        }
        private void drawOne()
        {
            grx.DrawLine(roundPen, 30, 10, 30, 24);
            grx.DrawLine(roundPen, 30, 26, 30, 40);
        }


        private void drawTwo()
        {
            grx.DrawLine(roundPen, 14, 10, 29, 10);
            grx.DrawLine(roundPen, 30, 10, 30, 24);
            grx.DrawLine(roundPen, 14, 25, 29, 25);
            grx.DrawLine(roundPen, 14, 26, 14, 40);
            grx.DrawLine(roundPen, 14, 41, 29, 41);
        }

        private void drawThree()
        {
            grx.DrawLine(roundPen, 14, 10, 29, 10);
            grx.DrawLine(roundPen, 30, 10, 30, 24);
            grx.DrawLine(roundPen, 14, 25, 29, 25);
            grx.DrawLine(roundPen, 30, 26, 30, 40);
            grx.DrawLine(roundPen, 14, 41, 29, 41);
        }
        private void drawFour()
        {
            grx.DrawLine(roundPen, 15, 11, 15, 24);
            grx.DrawLine(roundPen, 16, 25, 29, 25);
            grx.DrawLine(roundPen, 30, 10, 30, 24);
            grx.DrawLine(roundPen, 30, 26, 30, 40);
        }
        private void drawFive()
        {
            grx.DrawLine(roundPen, 15, 10, 29, 10);
            grx.DrawLine(roundPen, 15, 11, 15, 24);
            grx.DrawLine(roundPen, 16, 25, 29, 25);
            grx.DrawLine(roundPen, 30, 26, 30, 40);
            grx.DrawLine(roundPen, 15, 41, 29, 41);
        }

        private void drawSix()
        {
            grx.DrawLine(roundPen, 15, 11, 15, 24);
            grx.DrawLine(roundPen, 15, 26, 15, 39);
            grx.DrawLine(roundPen, 16, 25, 29, 25);
            grx.DrawLine(roundPen, 30, 26, 30, 40);
            grx.DrawLine(roundPen, 15, 41, 29, 41);
        }
        private void drawSeven()
        {
            grx.DrawLine(roundPen, 15, 10, 29, 10);
            drawOne();
        }
        private void drawEight()
        {
            grx.DrawLine(roundPen, 15, 10, 29, 10);
            grx.DrawLine(roundPen, 30, 10, 30, 24);
            drawSix();
        }
        private void drawNine()
        {
            grx.DrawLine(roundPen, 15, 10, 29, 10);
            grx.DrawLine(roundPen, 15, 11, 15, 24);
            grx.DrawLine(roundPen, 16, 25, 29, 25);
            drawOne();
        }
        private void drawZero()
        {
            grx.DrawLine(roundPen, 15, 11, 15, 24);
            grx.DrawLine(roundPen, 15, 26, 15, 39);
            grx.DrawLine(roundPen, 15, 41, 29, 41);
            drawSeven();
        }
       
    }
}





我在表单上绘制并分配价值不显示数字....



这是表格代码 - >





I draw it on my form and assign the value it does not display the number....

This is Form Code -->

 private void button1_Click(object sender, EventArgs e)
        {
digitDisplay1.digitValue = 2;            
        }





提前致谢.....



Thanks in advance.....

推荐答案

digitDisplay1.digitValue = 2; 改为 digitDisplay1.DisplayDigit = 2



如果使用digitValue字段而不是DisplayDigit属性,则不执行showDigit()方法。



顺便说一句:你可能发现所有如果您已经在调试模式下启动了程序并观察了它的执行情况,请自行编写。
Change digitDisplay1.digitValue = 2; to digitDisplay1.DisplayDigit = 2

If you use digitValue field instead of DisplayDigit property, showDigit() method is not executed.

BTW : you could have found that all by yourself if you had launched your program in debug mode and watched its execution.


这篇关于自定义控件在C#中不起作用....的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆