C#使用TextBox作数据输入方法

 更新时间:2021年06月01日 11:17:49   作者:怪都督  
笔者最近需要上位机与下位机进行数据交互,在广泛参考大佬的资料后,较为完善地使用Textbox控件进行数据输入的功能。感兴趣的可以了解一下

笔者最近需要上位机与下位机进行数据交互,在广泛参考大佬的资料后,较为完善地使用Textbox控件进行数据输入的功能。
程序段主要功能:实现输入数据并转换成byte数组再通过串口发送至下位机。

读取TextBox控件中数据并发送

private void Botton_Float_Click(object sender, EventArgs e)
 {
     if (button1.Text == "关闭串口")
     {
         if(TextBox_Tem_Cal.Text != String .Empty) //判断数据输入框是否为空
         {
             HexMath CRC = new HexMath();
             Byte[] buffer = new Byte[6];
             
             float tem_cal_float = float.Parse(TextBox_Tem_Cal.Text);
             Byte[] float_byte_array = new Byte[4];
             float_byte_array = FloatToBytes(tem_cal_float);

             buffer[0] = float_byte_array[0];
             buffer[1] = float_byte_array[1];
             buffer[2] = float_byte_array[2];
             buffer[3 ] = float_byte_array[3];
             
             CRC.CalculateCrc16(buffer, out buffer[5], out buffer[4]);
             serialPort1.Write(buffer, 0, 6);
         }
        else
         {
             MessageBox.Show("校准数据不能为空");
         }
     }
     else
     {
         MessageBox.Show("串口未打开");
     }
 }

限制TextBox控件输入数据

private void TextBox_Tem_Cal_KeyPress(object sender, KeyPressEventArgs e)//在TextBox中按下按键时触发事件,保证只能输入数字
{
    //判断按键是不是要输入的类型。
    if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && (int)e.KeyChar != 8 && (int)e.KeyChar != 46)
        e.Handled = true;

    //小数点的处理。
    if ((int)e.KeyChar == 46)                           //小数点
    {
        if (TextBox_Tem_Cal.Text.Length <= 0)
            e.Handled = true;   //小数点不能在第一位
        else
        {
            float f;
            float oldf;
            bool b1 = false, b2 = false;
            b1 = float.TryParse(TextBox_Tem_Cal.Text, out oldf);
            b2 = float.TryParse(TextBox_Tem_Cal.Text + e.KeyChar.ToString(), out f);
            if (b2 == false)
            {
                if (b1 == true)
                    e.Handled = true;
                else
                    e.Handled = false;
            }
        }
    }
}

Float 与 byte数组 互转

private static byte[] FloatToBytes(float data) 
{
    unsafe
    {
        byte* pdata = (byte*)&data;
        byte[] byteArray = new byte[sizeof(float)];
        for (int i = 0; i < sizeof(float); ++i)
            byteArray[i] = *pdata++;
        return byteArray;
    }
}
private static float BytesToFloat(byte[] data)
{
    unsafe
    {
        float a = 0.0F;
        byte i;
        byte[] x = data;
        void* pf;
        fixed (byte* px = x)
        {
            pf = &a;
            for (i = 0; i < data.Length; i++)
            {
                *((byte*)pf + i) = *(px + i);
            }
        }
        return a;
    }
}

程序参考:

TextBox输入限制
C# byte与float转换

到此这篇关于C#使用TextBox作数据输入方法的文章就介绍到这了,更多相关C# TextBox数据输入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#正则表达式匹配HTML中的图片路径,图片地址代码

    C#正则表达式匹配HTML中的图片路径,图片地址代码

    最近的项目中有个关于网页取图的功能需要我自己开发,那就是用正则表达式来匹配图片标签,这里简单介绍下实现方法,需要的朋友可以参考下
    2013-12-12
  • C#中List和数组之间转换的方法

    C#中List和数组之间转换的方法

    这篇文章主要介绍了C#中List和数组之间转换的方法,涉及比较简单的转换技巧,需要的朋友可以参考下
    2015-02-02
  • C#异步编程的三种模式

    C#异步编程的三种模式

    本文详细讲解了C#异步编程的三种模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#实现给图片添加日期信息的示例详解

    C#实现给图片添加日期信息的示例详解

    这篇文章主要为大家详细介绍了如何利用C#实现给图片添加日期信息,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 深入理解C#委托delegate的使用

    深入理解C#委托delegate的使用

    本文主要介绍了C#委托delegate的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C# 格式化字符串的实现代码

    C# 格式化字符串的实现代码

    这篇文章主要介绍了C# 格式化字符串的实现代码,需要的朋友可以参考下
    2016-11-11
  • C#实现强制关闭当前程序进程

    C#实现强制关闭当前程序进程

    这篇文章主要介绍了C#实现强制关闭当前程序进程,本文直接给出实现代码,可以实现完全Kill掉不留痕迹,需要的朋友可以参考下
    2015-06-06
  • C#加解密之DES算法的实现

    C#加解密之DES算法的实现

    DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。本文将用C#语言实现DES算法,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-08-08
  • C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    这篇文章主要介绍了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,以实例形式较为详细的讲述了.NET Framework里面提供的三种Timer具体用法,需要的朋友可以参考下
    2014-10-10
  • adonet基础示例分享(adonet连接数据库)

    adonet基础示例分享(adonet连接数据库)

    这篇文章主要介绍了adonet基础示例分享(adonet连接数据库),需要的朋友可以参考下
    2014-04-04

最新评论