winform控件开发一之复合控件开发(1)模拟量显示1

winform控件开发包括三种类型

  1. 复合控件,又称为组合控件
  2. 扩展控件
  3. 自定义控件

复合控件:

复合控件,又称为组合控件,一般是将现有控件功能进行组合形成一个新的控件。

举例:

设计一个工控中常用的模拟量控件,可以显示变量的名称,变量值和单位,如下图所示

 在这个复合空间中,左边使用一个lable显示变量名,中间使用一个textbox显示变量值,右边也是一个lable显示单位,

为了更好的布局这三个控件,这里使用了tableLayout控件,将其设置为1行3列,分别将两个lable和一个textbox添加到tableLayout设置的三个空格中

 

复合控件创建步骤如下:

添加“新建项”》选择“用户控件”》输入名称“AnalogDisplay”点击确定

这里注意,复合控件使用的是用户控件模板创建的,其继承UserControl类

 不同于复合控件,扩展控件继承需要扩展的控件,而自定义控件继承Control类,具体方式参考后续笔记。

 

具体实现:

或者:

 

 代码如下:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace 各种C_sharp功能测试
{
    
    public partial class AnalogDisplay : UserControl
    {
        public AnalogDisplay()
        {
            InitializeComponent();
            txtVarValue.KeyDown += TxtVarValue_KeyDown;
        }


        //变量名
        public string VarName
        {
            get { return lblVarName.Text; }
            set { lblVarName.Text = value; }
        }

        //变量值
        public string VarValue
        {
            get { return txtVarValue.Text; }
            set { txtVarValue.Text = value; }
        }

        //单位        
        public string VarUnit
        {
            get { return lblVarUnit.Text; }
            set { lblVarUnit.Text = value; }
        }
        //设置显示字体
        public Font TextFont
        {
            get { return lblVarName.Font; }
            set
            {
                lblVarName.Font = value;
                txtVarValue.Font = value;
                lblVarUnit.Font = value;
            }
        }
        //控制显示还是输入
        public bool InputEnable
        {
            get { return txtVarValue.Enabled; }
            set { txtVarValue.Enabled = value; }
        }
        //添加一个事件,当输入变量值并按下回车键时触发该事件
        public event EventHandler<AnalogDisplayArg> ValueChanged;

        private void TxtVarValue_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (!string.IsNullOrEmpty(VarValue))
                {
                    ValueChanged?.Invoke(this, new AnalogDisplayArg(VarValue));
                }
                
            }
        }
    }

    public class AnalogDisplayArg : EventArgs
    {
        public string Value { get; set; }
        public AnalogDisplayArg(string value)
        {
            Value = value;
        }
    }
}

 

posted on 2023-06-21 14:00  hanzq_go  阅读(220)  评论(0编辑  收藏  举报

导航