首页 > 其他分享 >WPF TextBox 允许输入数字及字母的工具类

WPF TextBox 允许输入数字及字母的工具类

时间:2023-11-15 14:15:38浏览次数:43  
标签:TextBoxControl 字母 System MaskInputTextBoxUtils using WPF public TextBox

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Controls;
using System.Windows.Input;

namespace 命名空间
{
    /// <summary>
    /// TextBox 输入控制
    /// </summary>
    public class MaskInputTextBoxUtils
    {

        #region 《正则表达式常量》

        /// <summary>
        /// 字母大小写和数字
        /// </summary>
        public const string LETTERS_AND_NUMBERS = @"[^A-Za-z0-9]";
        /// <summary>
        /// 数字和小数点
        /// </summary>
        public const string NUMBERS_AND_POINT = @"[^0-9.]";
        /// <summary>
        /// 纯数字
        /// </summary>
        public const string NUMBERS = @"[^0-9]";

        #endregion


        public static MaskInputTextBoxUtils CreateObject(TextBox TextBoxControl, string RegExp)
        {
            return new MaskInputTextBoxUtils(TextBoxControl, RegExp);
        }

        private MaskInputTextBoxUtils(TextBox textBoxControl, string regExp)
        {
            this.TextBoxControl = textBoxControl;
            this.RegexObj = new Regex(regExp);
        }

        public Regex RegexObj { get; protected set; }

        public TextBox TextBoxControl { get; protected set; }

        public void Build()
        {
            ///关闭输入法
            InputMethod.SetPreferredImeState(TextBoxControl, InputMethodState.Off);
            InputMethod.SetIsInputMethodEnabled(TextBoxControl, false);

            this.TextBoxControl.PreviewTextInput += TextBoxControl_PreviewTextInput;
            this.TextBoxControl.TextChanged += TextBoxControl_TextChanged;
            this.TextBoxControl.Unloaded += TextBoxControl_Unloaded;
        }

        private void TextBoxControl_Unloaded(object sender, System.Windows.RoutedEventArgs e)
        {
            this.TextBoxControl.PreviewTextInput -= TextBoxControl_PreviewTextInput;
            this.TextBoxControl.TextChanged -= TextBoxControl_TextChanged;
            this.TextBoxControl.Unloaded -= TextBoxControl_Unloaded;
        }

        private void TextBoxControl_TextChanged(object sender, TextChangedEventArgs e)
        {
            //屏蔽非法字符粘贴输入
            TextChange[] change = new TextChange[e.Changes.Count];
            e.Changes.CopyTo(change, 0);
            foreach (TextChange tc in change)
            {
                if (tc.AddedLength <= 0)
                {
                    continue;
                }
                ///找出符合表达式要求的字符输入
                string text = TextBoxControl.Text.Substring(tc.Offset, tc.AddedLength);
                string t = "";
                foreach (char c in text)
                {
                    if (!RegexObj.IsMatch(c.ToString()))
                    {
                        t += c.ToString();
                    }
                }
                TextBoxControl.Text = TextBoxControl.Text.Remove(tc.Offset, tc.AddedLength).Insert(tc.Offset, t);
                TextBoxControl.CaretIndex = tc.Offset + t.Length;
            }
        }

        private void TextBoxControl_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
        {
            e.Handled = RegexObj.IsMatch(e.Text);
        }
    }
}


使用方法
private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ///输入字符控制
            MaskInputTextBoxUtils.CreateObject(this.textBox1, MaskInputTextBoxUtils.LETTERS_AND_NUMBERS).Build();
            MaskInputTextBoxUtils.CreateObject(this.textBox2, MaskInputTextBoxUtils.NUMBERS_AND_POINT).Build();
            MaskInputTextBoxUtils.CreateObject(this.textBox3, MaskInputTextBoxUtils.NUMBERS).Build();

        }

 

 

标签:TextBoxControl,字母,System,MaskInputTextBoxUtils,using,WPF,public,TextBox
From: https://www.cnblogs.com/kfjdy/p/17833672.html

相关文章

  • 01 WPF-HelloWorld
    01HelloWorld简介WPF全称:WindowsPresentationFoundationWindows用户界面框架,统一的编程模型、语言和框架,做到了界面设计与后端开发分离。特点:呈现效果不受分辨率的影响基于DirectX3d技术,可以做出炫酷的界面提供UI框架,集成了矢量图形、流动文字支持、3d视觉效果和控件......
  • 界面控件DevExpress WPF Splash Screen,让应用启动画面更酷炫!
    DevExpressWPF的SplashScreen组件可以为应用程序创建十分酷炫的启动屏幕,提高用户在漫长的启动操作期间的体验!P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用......
  • .net6.0及以上WPF中使用GDI+的demo
    usingSystem;usingSystem.Drawing;usingSystem.Runtime.InteropServices;usingSystem.Windows;usingSystem.Windows.Interop;usingSystem.Windows.Media.Imaging;namespaceTryDemo{///<summary>///InteractionlogicforMainWindow.xaml......
  • leetcode hot100-02 字母异位词分组
    题目:字母异位词分组难度:中等地址:https://leetcode.cn/classic/problems/group-anagrams/description/描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。过程:1、首先啥叫......
  • 1. WPF DataBinding--概述
    数据绑定为应用程序提供了一种简单而一致的方式来表示数据并与之交互,UI元素可以绑定到不同的数据源(.net对象和XML),什么是数据绑定数据绑定是一个UI和它显示数据建立联系的过程。如果建立了正确的绑定,当数据发生变化并发出适当的通知时,UI元素也会自动跟着变化,当UI元素的数据表现发生......
  • parseInt 以数字开头,则取截止到第一个字母出现之前的所有数字进行转换 parseInt("12
    以下哪些表达式的结果为true()Aundefined==nullBisNaN("100")CparseInt("1a")===1D[]instanceofArray正确答案:ACD考点一:isNaN()的隐式转换isNaN(item)的时候会先将item进行Number(item)的隐式转换,然后再isNaN(item)考点二:parseInt(string,raix)1)注意:string......
  • WPF win10窗体背景模糊
    internalenumAccentState{ACCENT_DISABLED=0,ACCENT_ENABLE_GRADIENT=1,ACCENT_ENABLE_TRANSPARENTGRADIENT=2,ACCENT_ENABLE_BLURBEHIND=3,ACCENT_INVALID_STATE=4}[StructLayout(LayoutKind.......
  • WPF控件设计艺术1按钮与自定义控件设计总结
    框架.NET6.0编译器:vsCommunity2022基于C#大致框架代码分享纯文本按钮TextOnlyButton资源字典分享<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">......
  • WPF-双向绑定
    在WPF中,现双向绑定:使用Binding元素的Mode属性设置为TwoWay。例如:<TextBoxText="{BindingPath=PropertyName,Mode=TwoWay}"/> ,这将将TextBox的值绑定到PropertyName属性,并且当TextBox的值更改时,将自动更新PropertyName属性的值。使用属性的依赖属性,可以在属性的元数据中......
  • 输入一串字符,统计字母、数字、空格、其他字符的个数
    #include<stdio.h>intmain(){ charc; intletter=0,space=0,digit=0,other=0; printf("inputacharline:"); c=getchar(); while(c!='\n') { if(c>='a'&&c<='z'||c&g......