WPF开发之限制输入的控件

本文介绍了在WPF开发中如何限制输入的控件,包括TextBox和ComboBox的实现。作者通过继承TextBox和ComboBox,利用正则表达式限制输入内容,并解决粘贴、选中文字输入、输入法等问题。
摘要由CSDN通过智能技术生成

0xFF 题外话

在杭州报考了今年的研考,但是今天才发现杭州招生点昨天就结束了网上缴费,虽然还是在支付里面成功付了钱,但是还是有很大的可能不让考了。很是绝望,心情不好不想复习,就跑来写了这篇很久以前就准备写的博客。

0x00 前言

公司项目原来使用WinForms开发的GUI,进来的时候都是用的现成的方法实现限制输入的格式。虽然写的不是很好(原来使直接限制输入的字符),但也懒得去改那些代码。后来组里开始转用WPF来实现GUI,于是也就没有现成的可以直接用了。因为需求要求必须限定输入的字符,想着后面肯定也得用,就去决定自己去实现一下。

一开始想着WPF是否直接提供了相应的属性可以直接设置,但是找了一会没发现,网上很多方法也不适合。然后准备按之前WinForms实现的方法来实现,即通过过滤字符来实现,如限制了只能输入0-9的数字。但是在完成之后觉得还是不好,在允许输入小数点和负号后就可以输入例如1.1.1这样的字符串,而且WPF中判断字符比WinForms中稍微复杂一下,然后就决定用正则表达式来实现输入的限制。

0x01 实现过程

因为要将这个功能直接封装成一个控件供后面使用,就直接从System.Windows.Controls.TextBox继承,这样就不用去实现文本框的具体细节了,同理ComboBox也是直接继承自System.Windows.Controls.ComboBox。因为需求中需要满足多种限定条件,如输入浮点数等,于是就开放了一个属性供选择限定的类型,再根据选择的类型确定正则表达式。其实也可以直接开放正则表达式字符串属性可以设置,但是当时因为写好了又懒得改就没有再去修改了(其实不就是把privatepublic,懒死算了)。

if (RegexString == null)
{
    switch (ConstraintType)
    {
        case RestrictType.Int:    // 整数
            RegexString = @"^[-]?([\d]+)?$";
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值