自定义两个控件,一个是显示图标和文字的矩形,一个是带边框的label(但是不是label)

记录遇到的两个坑

坑1. 一开始我继承button 来实现下面的控件1,后面发现button没有双击事件。就改成继承UserControl了。重新编译,导致设计时的控件文本全部被清空,因为UserControl的Text属性被设置了一些属性

     [Bindable(false)]
        [Browsable(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public override string Text { get; set; }

我是这样无脑处理的:

     [Bindable(true)]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public override string Text
        {
            get { return base.Text; }
            set {
                base.Text = value;
                Invalidate();
            }
        }

坑2. 我有一个字段 Size iconSize; 我给它定义了一个属性

public Size IconSize
        {
            get { return IconSize; }
            set
            {
                iconSize = value;
                Invalidate();
            }
        }

我把get 里面返回属性本身了。结果可想而知设计时打不开,运行时一会就stackoverflow了。

控件1.需要居中显示图标和文字。控件2.一个有边框的矩形,居中显示文字,边框是向内的。显示效果如下:

代码可以在https://github.com/wanglantian/WinformApplication/tree/master/WinformControls/SelfDefineControls里面找。有问题联系讨论。

原文地址:https://www.cnblogs.com/jianIsTheBest/p/10591091.html