C# winform 自定义控件—文本框(Textbox)

一、前言

        在上位机软件开发过程中,文本框(Textbox)是使用最多的控件之一,但是系统自带的控件只有基础的显示和输入功能,针对一些特定的开发无法兼顾,所以本期我们自己基于textbox控件开发一些额外的基础功能。

二、创建控件类

        1.新建类库

        2.删除生成类

        3.新建自定义控件

        4.生成后转到代码视图,开始写代码

三、添加代码

        在构造函数传参,这里只传递了背景色值。

public mytextbox()
{
    InitializeComponent();
    baseColor = this.BackColor;
}

        1.添加属性

                此部分为属性,可以在界面的属性窗口看到。

#region 属性
Color baseColor = Color.Transparent;//背景色
Color errColor = Color.Red;//错误颜色
Color changeColor = Color.LimeGreen;//修改颜色
string LastText = string.Empty;//最后一次的值(焦点离开时)
double min = 0;
double max = 100;
double LastValue = double.PositiveInfinity;//最后一个值
double value = double.PositiveInfinity;//当前文本
       

[Category("Color")]
[Description("背景色")]
public Color BaseColor
{
    get { return baseColor; }
    set { baseColor = value; Refresh(); }
}

[Category("Color")]
[Description("错误颜色")]
public Color ErrorColor
{
    get { return errColor; }
    set {  errColor = value; Refresh(); }
}

[Category("Color")]
[Description("修改颜色")]
public Color ChangeColor
{
    get { return changeColor; }
    set { changeColor = value; Refresh(); }
}

[Category("Data")]
[Description("获取值double")]
public double Value
{
    get { return this.value; }
    set { this.value = value; Refresh(); }
}

[Category("Data")]
[Description("最小值")]
public double Min
{
    get { return min; }
    set { min = value; Refresh(); }
}

[Category("Data")]
[Description("最大值")]
public double Max
{
    get { return max; }
    set { max = value; Refresh(); }
}
#endregion

        2.添加功能

                1.这部分为文本变动功能,利用自带TextChange函数,补充变动后文本状态。这里包含两部分,一是手动点击后,焦点在文本框上,还有一种是软件启动自动赋值,这时焦点不在文本框上。

protected override void OnTextChanged(EventArgs e)
{
    base.OnTextChanged(e);

    if(this.Focus())//有焦点
    {
        //非数值
        if (this.Text != LastText)
        {
            this.BackColor = changeColor;
        }
        else
        {
            this.BackColor = baseColor;
        }

        //数值类型
        try { value = double.Parse(this.Text); }
        catch { value = double.PositiveInfinity; }

        if(/*(this.Text != "" && this.Text != "NaN") && */value != double.PositiveInfinity)
        {
            if(value >max || value < min)
            {
                this.BackColor = errColor;
            }
            else
            {
                if (value != LastValue)
                {
                    this.BackColor = changeColor;
                }
                else
                {
                    this.BackColor = baseColor;
                }
            }
        }
    }
    else//无焦点变值 只检测数值
    {
        //数值类型
        try { value = double.Parse(this.Text); }
        catch { value = double.PositiveInfinity; }

        if (value != double.PositiveInfinity)
        {
            if (value > max || value < min)
            {
                this.BackColor = errColor;
            }
        }
    }
}

                2.焦点离开,记录本次的值,用于与下次新值进行对比。

protected override void OnLeave(EventArgs e)
{
    base.OnLeave(e);

    if ( (value <= max && value >= min))
    {
        LastValue = value;
    }
    LastText = this.Text;

}

                3.单独的set函数,用于点击保存时自动更新文本状态,如果只是想显示颜色和状态,不需要此部分内容(为空时会显示红色)。

public void Set(bool Reset = false)
{
    OnLeave(null);
    //非数值
    if (this.Text != LastText)
    {
        this.BackColor = changeColor;
    }
    else
    {
        this.BackColor = baseColor;
    }

    if (value != double.PositiveInfinity)
    {
        if (value > max || value < min)
        {
            this.BackColor = errColor;
        }
        else
        {
            if (value != LastValue)
            {
                this.BackColor = changeColor;
            }
            else
            {
                this.BackColor = baseColor;
            }
        }
    }

    if(Reset||string.IsNullOrEmpty(this.Text))
    {
        this.BackColor = errColor;
    }
}

四、显示效果

        因根据自己实际情况添加的功能,所以各位可以根据自己的实际需求添加相应功能。

五、声明/结尾

         1.如有疑问或错误,可以在评论中提出;

         2.更新不易,点赞关注,谢谢。

         3.如有侵权,请告知。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# Winform 是一种基于 Windows 表单的应用程序开发框架,提供了丰富的控件来构建用户界面。以下是一些常见的 Winform 控件及其功能介绍: 1. Label:标签控件,用于显示文本信息。 2. Button:按钮控件,用于触发事件或执行操作。 3. TextBox文本框控件,用于输入和显示文本信息。 4. ComboBox:组合框控件,用于从列表中选择一个选项。 5. ListBox:列表框控件,用于在列表中显示一组选项。 6. CheckedListBox:复选框列表框控件,用于在列表中显示一组选项,并允许用户选择多个选项。 7. RadioButton:单选按钮控件,用于在一组选项中选择一个选项。 8. CheckBox:复选框控件,用于允许用户选择或取消选择一个选项。 9. DateTimePicker:日期时间选择器控件,用于选择日期和时间。 10. MonthCalendar:月历控件,用于显示日期和日程安排。 11. PictureBox:图片框控件,用于显示图像文件。 12. ProgressBar:进度条控件,用于显示操作的进度。 13. Timer:定时器控件,用于在指定的时间间隔内触发事件。 14. MenuStrip:菜单栏控件,用于显示菜单。 15. ToolStrip:工具栏控件,用于显示工具按钮。 16. StatusStrip:状态栏控件,用于显示应用程序状态信息。 17. TabControl:选项卡控件,用于在多个选项卡中显示不同的内容。 18. ListView:列表视图控件,用于在列表中显示数据。 19. TreeView:树视图控件,用于以树形结构显示数据。 20. WebBrowser:Web浏览器控件,用于显示网页内容。 以上是一些常见的 Winform 控件及其功能介绍,开发者可以根据需求选择适合自己的控件来构建应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值