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

时间:2021-03-03 17:34:58

记录遇到的两个坑

坑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 里面返回属性本身了。结果可想而知设计时打不开,运行时一会就*了。

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

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

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