C#自定义控件—文本显示、文本设值

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

自定义绘制组件更方便以后直接使用,是一件一劳永逸的事情。

End

相关推荐
△曉風殘月〆5 小时前
WPF MVVM入门系列教程(二、依赖属性)
c#·wpf·mvvm
逐·風6 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
m0_6569747410 小时前
C#中的集合类及其使用
开发语言·c#
九鼎科技-Leo10 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo12 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
.net开发12 小时前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
小乖兽技术12 小时前
C#与C++交互开发系列(二十):跨进程通信之共享内存(Shared Memory)
c++·c#·交互·ipc
幼儿园园霸柒柒13 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
平凡シンプル15 小时前
C# EF 使用
c#
丁德双15 小时前
winform 加载 office excel 插入QRCode图片如何设定位置
c#·excel