WPF实现TextBox控件输入时对字节的限制

1.新建WPF应用程序;
2.打开MainWindow.xaml文件,拖入一个TextBox控件;
3.打开MainWindow.xaml.cs文件,输入后面代码即可。
效果图:(本示例是限制为6字节,所以两个汉字两个数字刚好6字节,可以在代码中自行更改)
在这里插入图片描述
(1)MainWindow.xaml文件代码如下:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="187*"/>
            <ColumnDefinition Width="606*"/>
        </Grid.ColumnDefinitions>
        <TextBox x:Name="TextBox1" HorizontalAlignment="Left"
                 Height="41" Margin="97.873,134,0,0" TextWrapping="Wrap" VerticalAlignment="Top" 
                 Width="201" FontSize="20" TextAlignment="Center" Grid.Column="1" 
                 TextChanged="textBox1_TextChanged"/>
        <!--TextChanged属性为MainWindow.xaml.cs文件中的事件-->
    </Grid>

(2)MainWindow.xaml.cs文件代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Type
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

		//判断字节输入长度
        //public static bool OutOfLength(string str, int len = 6)
        //{

        //    byte[] bt = System.Text.Encoding.Default.GetBytes(str.Trim());
        //    return bt.Length > len;
        //}


        public string VerStr(System.Windows.Controls.TextBox textbox, int max)
        //在winform中可能为public string VerStr(System.Windows.Form.TextBox textbox, int max)
        {
            int n = 0;
            string str = "";
            foreach (char s in textbox.Text)
            {
                char[] c = s.ToString().ToCharArray();
                for (int i = 0; i < c.Length; i++)
                {
                    str = str + s.ToString();
                    byte[] b = System.Text.Encoding.Unicode.GetBytes(c, i, 1);
                    if (b.Length == 2)
                    {
                        if (b[1] != 0)
                            n = n + 2;
                        else
                            n++;
                    }
                }
                if (n >= max)
                    break;
            }
            return str;
        }

        private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
            this.TextBox1.Select(this.TextBox1.Text.Length, 0);//设置光标始终停止末尾
            int m = this.TextBox1.SelectionStart;
            //设置编码为UTF-8或者GBK,最好GBK
            int n = System.Text.Encoding.GetEncoding("GBK").GetByteCount(this.TextBox1.Text);
            if (n >= 6)//最大字节数设置
            {
                this.TextBox1.Text = VerStr(this.TextBox1, 6);
                this.TextBox1.SelectionStart = m;
                InputMethod.SetIsInputMethodEnabled(TextBox1, false);//设置超出固定字节长度后禁止输入
            }
        }

    }
}

                                                          freesheep720 作
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值