C# Winform 支持Hex与ASCII输入和切换的文本框_c# 一个文本框中做到每个 hex 字符后面插入一个空格

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void CM_Clear_Click(object sender, EventArgs e)
    {
        this.Text = "";
    }
    #endregion

    #region 输入控制
    protected override void OnTextChanged(EventArgs e)
    {
        if (_IsHex)
        {//Hex输入
            string Content = this.Text.Replace(" ", "");//获取去除空格后的字符内容
            int SpaceCount = Content.Length / 2;
            int StartIndex = 2;
            for (int i = 0; i < SpaceCount; i++)
            {
                Content = Content.Insert(StartIndex, " ");
                StartIndex = StartIndex + 3;
            }
            this.Text = Content.TrimEnd().ToUpper();
        }
        this.SelectionStart = this.Text.Length;
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (_IsHex)
        {
            if ((e.KeyChar >= '0' && e.KeyChar <= '9')//数字0-9键   
                 || (e.KeyChar >= 'A' && e.KeyChar <= 'F')//字母A-F 
                 || (e.KeyChar >= 'a' && e.KeyChar <= 'f')//字母a-f 
                 || e.KeyChar == 0x08//退格键
                 || e.KeyChar == 0x03//拷贝
                 || e.KeyChar == 0x18)//剪切
            {
                e.Handled = false;
                return;
            }
        }
        else
        {
            if ((e.KeyChar >= 0x20 && e.KeyChar <= 0x7E)
                 || e.KeyChar == 0x08//退格键
                 || e.KeyChar == 0x0D//回车键
                 || e.KeyChar == 0x03//拷贝
                 || e.KeyChar == 0x18)//剪切
            {
                e.Handled = false;
                return;
            }
        }
        if (e.KeyChar == 0x16)//粘贴
        {//粘贴前数据格式检查
            if (CheckPaste())
            {
                e.Handled = false;
                return;
            }
        }
        e.Handled = true;
    }

    /// <summary>
    /// 粘贴数据格式检查
    /// </summary>
    /// <returns></returns>
    private bool CheckPaste()
    {
        try
        {
            char[] PasteChar = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString().ToCharArray();
            if (_IsHex)
            {
                foreach (char data in PasteChar)
                {
                    if (!((data >= '0' && data <= '9')//数字0-9键   
                     || (data >= 'A' && data <= 'F')//字母A-F 
                     || (data >= 'a' && data <= 'f')//字母a-f
                     || data == 0x20))//空格
                    {
                        MessageBox.Show("粘贴数据含有非法字符,只能包含数字0-9,大写英文字母A-F,小写英文字母a-f以及空格!", "非法的粘贴", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
            else
            {
                foreach (char data in PasteChar)
                {
                    if (!((data >= 0x20 && data <= 0x7E)
                     || data == 0x0A
                     || data == 0x0D))//回车键
                    {
                        MessageBox.Show("粘贴数据含有非法字符,只能包含ASCII码字符!", "非法的粘贴", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return false;
        }
    }
    #endregion

    #region 公共方法
    /// <summary>
    /// 获取命令对象
    /// </summary>
    /// <returns></returns>
    public Model.Command GetCMD()
    {
        try
        {
            if (this.Text.Trim() == string.Empty)
            {
                MessageBox.Show("不允许内容为空!");
                return null;
            }
            Model.Command Cmd = new Model.Command();
            Cmd.IsHex = _IsHex;
            if (Cmd.IsHex)
            {//Hex
                string[] HexStr = this.Text.Trim().Split(' ');
                Cmd.DataBytes = new byte[HexStr.Length];
                for (int i = 0; i < HexStr.Length; i++)
                {
                    Cmd.DataBytes[i] = (byte)(Convert.ToInt32(HexStr[i], 16));
                }
            }
            else
            { //ASCII
                Cmd.DataBytes = new ASCIIEncoding().GetBytes(this.Text.Trim());
            }
            return Cmd;
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
            return null;
        }
    }
    /// <summary>
    /// 设置命令对象
    /// </summary>
    /// <param name="Cmd"></param>
    public void SetCMD(Model.Command Cmd)
    {
        try
        {
            this.IsHex = Cmd.IsHex;
            if (this.IsHex)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < Cmd.DataBytes.Length; i++)
                {
                    sb.AppendFormat("{0:x2}", Cmd.DataBytes[i]);
                }
                this.Text = sb.ToString();
            }
            else
            {
                this.Text = new ASCIIEncoding().GetString(Cmd.DataBytes);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    #endregion
}

}


  
 



using System;
using System.Collections.Generic;
using System.Text;

namespace Model
{
///
/// 命令对象
///
public class Command
{
bool _IsHex = true;
byte[] _DataBytes = null;

    /// <summary>
    /// 是否16进制数据
    /// </summary>
    public bool IsHex
    {
        set {
            _IsHex = value;
        }
        get {
            return _IsHex;
        }
    }

    /// <summary>
    /// byte数据
    /// </summary>
    public byte[] DataBytes
    {
        set
        {
            _DataBytes = value;
        }

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值