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
。因为需求中需要满足多种限定条件,如输入浮点数等,于是就开放了一个属性供选择限定的类型,再根据选择的类型确定正则表达式。其实也可以直接开放正则表达式字符串属性可以设置,但是当时因为写好了又懒得改就没有再去修改了(其实不就是把private
改public
,懒死算了)。
if (RegexString == null)
{
switch (ConstraintType)
{
case RestrictType.Int: // 整数
RegexString = @"^[-]?([\d]+)?$";