C#用户控件之文本显示、设定组件
如何绘制一个便捷的文本显示组件、文本设值组件(TextShow,TextSet)?
绘制此控件的目的就是方便一键搞定标签显示(可自定义方法显示文本颜色等),方便自定义方法又省略了挨个拖拽的过程

纯定义属性
【文本设定】:字体、标签、值、单位;事件方法:Enter、Leave、KeyDown
【文本显示】:变量名称、变量值、单位、字体、控件刻度
直接上代码
【文本设定】
public partial class TextSet : UserControl { public TextSet() { InitializeComponent(); this.txt_Value.ReadOnly = true; } #region 属性 字体、标签、值、单位 private Font textFont = new Font("微软雅黑", 12); [Browsable(true)] [Category("布局_G")] [Description("字体格式")] public Font TextFont { get { return textFont; } set { if (value != null) { textFont = value; this.lbl_Title.Font = this.lbl_Unit.Font = this.txt_Value.Font = textFont; } } } private Color textColor = Color.Black; [Browsable(true)] [Category("布局_G")] [Description("文本颜色")] public Color TextColor { get { return textColor; } set { textColor = value; this.lbl_Title.ForeColor = this.lbl_Unit.ForeColor = this.txt_Value.ForeColor = textColor; } } private float textScale = 0.37f; [Browsable(true)] [Category("布局_G")] [Description("控件刻度")] public float TextScale { get { return textScale; } set { textScale = value; this.tableLayoutPanel1.ColumnStyles[0].Width = (this.Width - textScale * this.Width) * 0.75f; this.tableLayoutPanel1.ColumnStyles[1].Width = textScale * this.Width; this.tableLayoutPanel1.ColumnStyles[2].Width = (this.Width - textScale * this.Width) * 0.25f; } } private string varTitle = "变量名称"; [Browsable(true)] [Category("布局_G")] [Description("变量名称")] public string VarTitle { get { return varTitle; } set { varTitle = value; this.lbl_Title.Text = varTitle; } } private string varValue = "21.50"; [Browsable(true)] [Category("布局_G")] [Description("输入值")] public string VarValue { get { return varValue; } set { varValue = value; this.txt_Value.Text = varValue; } } private string varUnit = "℃"; [Browsable(true)] [Category("布局_G")] [Description("单位")] public string VarUnit { get { return varUnit; } set { varUnit = value; this.lbl_Unit.Text = varUnit; } } #endregion #region 输入使能事件 //正在输入标志位 public bool IsSetting { get; set; } private void txt_Value_Enter(object sender, EventArgs e) { IsSetting = true; this.txt_Value.ReadOnly = false; } private void txt_Value_Leave(object sender, EventArgs e) { IsSetting = false; this.txt_Value.ReadOnly = true; } //添加输入完成事件 public event EventHandler SettingChanged; private void txt_Value_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //技巧:输入完成移动焦点~输入框变灰 this.lbl_Title.Focus(); //激活触发事件 SettingChanged?.Invoke(this, e); } } #endregion }
【文本显示】
public partial class TextShow : UserControl { public TextShow() { InitializeComponent(); } #region Fields 变量名称、变量值、单位、字体、控件刻度 //[Browsable(true)] //[Category("布局_G")] //[Description("变量名称")] //public String VarName { get; set; } private Font textFont = new Font("Segoe UI Variable Display", 15, FontStyle.Bold); [Browsable(true)] [Category("布局_G")] [Description("字体格式")] public Font TextFont { get { return textFont; } set { if (value != null) { textFont = value; this.lbl_Value.Font = this.lbl_Unit.Font = textFont; } } } private Color textColor = Color.Blue; [Browsable(true)] [Category("布局_G")] [Description("文本颜色")] public Color TextColor { get { return textColor; } set { textColor = value; this.lbl_Value.ForeColor = this.lbl_Unit.ForeColor = textColor; } } private string varVlaue = "1.0E-5"; [Browsable(true)] [Category("布局_G")] [Description("变量值")] public string VarVlaue { get { return varVlaue; } set { varVlaue = value; this.lbl_Value.Text = varVlaue; } } private string unit = "Pa"; [Browsable(true)] [Category("布局_G")] [Description("单位")] public string Unit { get { return unit; } set { unit = value; this.lbl_Unit.Text = unit; } } private float textScale = 0.6f; [Browsable(true)] [Category("布局_G")] [Description("控件刻度")] public float TextScale { get { return textScale; } set { textScale = value; this.tableLayoutPanel1.ColumnStyles[0].Width = textScale * this.Width; this.tableLayoutPanel1.ColumnStyles[1].Width = this.Width - textScale * this.Width; } } #endregion
自定义绘制组件更方便以后直接使用,是一件一劳永逸的事情。