winCE 自定义控件开发之groupBox

2 篇文章 0 订阅
本文档介绍了如何在Windows CE(wince)环境下,由于系统不支持groupBox控件,作者通过c#进行自定义控件开发,利用panel和label实现groupBox功能。文中详细讲述了开发步骤,包括在VS2008中创建控件库,测试控件,并提供了修改技巧,如调整边框显示、文字颜色、自动调整label宽度等。此外,还提及了在控件使用过程中遇到的布局问题及其解决方案。
摘要由CSDN通过智能技术生成

2016-1-11 22:08:18 后面补充了一些对控件的修改

百度文库有一篇非常适合学习的文档:c#自定义控件开发

wince里用不了groupbox控件。所以只能自己写。

思路就是简单的组合控件:panel和label  后来发现直接用一个label就得了

第一步:vs2008中进行控件库编程

        //构造函数
        public MyGroupBox()
        {
            InitializeComponent();
            BorderColor = Color.Black;
        }
        private string TextStr;
        private bool bBorder;
        private Color BorderColor;
        //设置或获取前景色
        public Color ClockForeColor
        {
            get
            {
                return this.ForeColor;
            }
            set 
            {
                this.ForeColor = value;
                this.label1.ForeColor = value;
            }

        }
        //获取或设置text
        public string ClockText
        {
            get
            {
                return this.TextStr;
            }
            set
            {
                this.TextStr = value;
                this.label1.Text = value;
                Graphics g = this.CreateGraphics();
                StringFormat sf = new StringFormat();
                sf.FormatFlags = StringFormatFlags.NoWrap;
                SizeF sizeF = g.MeasureString(value, this.Font);
                this.label1.Width = (int)sizeF.Width;
            }

        }
        //border
        public bool ClockBorder {
            get {
                return this.bBorder;
            }
            set {
                this.bBorder = value;
            }
        }
        //主要是为了画边框 要考虑label的高度
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            if (bBorder) {
                Graphics dc = e.Graphics;
                int yStart = this.label1.Height / 2;
                Pen p = new Pen(this.BorderColor);
                dc.DrawRectangle(p, new Rectangle(0, yStart, this.Width-1, this.Height - yStart-1));
            }
        }
shift+F6生成控件的dll

第二步:测试控件

ClockBorder设为true后保存一下就会出现边框

ClockForeColor是设置label上的颜色的

ClockText是设置label的文字的 label的宽度根据文字字符的宽度自动改变

至于groupbox里的控件不随groupbox移动:在design.cs 中this.controls.add(this.label1);改为this.myGroupBox1.Controls.Add(this.label1);


修改:

1.关于Textstr变量。可以不要

ClockText函数修改如下,(主要是解决控件在使用时更改Text有时候中文在布局显示总是少一个字,关闭design.cs再打开才正常)

//获取或设置text
        public string ClockText
        {
            get
            {
                return this.label1.Text;
            }
            set
            {
                Graphics g = this.CreateGraphics();
                StringFormat sf = new StringFormat();
                sf.FormatFlags = StringFormatFlags.NoWrap;
                SizeF sizeF = g.MeasureString(value, this.label1.Font);
                this.label1.Width = 2 + (int)sizeF.Width;
                this.label1.Text = value;//就是将位置放到最后就行了
            }

        }

2.bBorder 是否显示边框。在构造函数中应该初始化为true。

3.groupbox的label字体。这个省不得,必须加上

//设置字体大小和粗细
        public Font ClockFont {
            get {
                return this.label1.Font;
            }
            set {
                this.label1.Font = value;
            }
        }
4.关于名称。如ClockText ClockForeColor,过于冗长,前面加Clock前缀是为了和本身存在的区分开。其实最好的解决办法是通过override来重写。大家可以自行测试。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值