限制文本框TextBox的输入内容,在很多场景都有应用。举个例子,现在文本框中,只能输入0、1、2、3、4、5、6、7、8、9、“|”这11个字符。

限制输入0-9很容易实现,关键是这个“|”符号。它在WPF中对应的是Key.OemPipe键。如果直接允许该键输入,那么会有“\”这个符号也可以输入。那么问题来了,怎么才能限制呢?很简单:先确认shift键是否已经按下。

关键代码如下:

 bool shiftKey = (Keyboard.Modifiers & ModifierKeys.Shift) != ;

这样,当我们确认已经按下了shift键时,才允许Key.OemPiple键按下,就可以确保只能输入“|”符号了。

一个完整的示例代码如下:

 private void textbox_keydown_event(object sender, KeyEventArgs)
{
bool shiftKey = (Keyboard.Modifiers & ModifierKeys.Shift) != ;
if (shiftKey == true)
{
if (e.Key != Key.OemPipe)
{
e.Handled = true;
}
}
else if (e.Key != Key.Delete && e.Key != Key.Back &&
e.Key != Key.D0 && e.Key != Key.D1 &&
e.Key != Key.D2 && e.Key != Key.D3 &&
e.Key != Key.D4 && e.Key != Key.D5 &&
e.Key != Key.D6 && e.Key != Key.D7 &&
e.Key != Key.D8 && e.Key != Key.D9 &&
e.Key != Key.NumPad0 && e.Key != Key.NumPad1 &&
e.Key != Key.NumPad2 && e.Key != Key.NumPad3 &&
e.Key != Key.NumPad4 && e.Key != Key.NumPad5 &&
e.Key != Key.NumPad6 && e.Key != Key.NumPad7 &&
e.Key != Key.NumPad8 && e.Key != Key.NumPad9)
{
e.Handled = true;
}
}

更新:

又出了新的需求!!!!!

要过滤空格输入。测试了一下,发现空格键space、上下左右、PageUp、PageDown几个键是KeyDown事件无法捕获的——也许可以捕获,反正我没有捕获到。测试还发现KeyUp和PreviewKeyDown事件都可以捕获。但是,问题是,使用KeyUp事件时,即是捕获到了,这个空格已经输入了,如果再删除,也会造成不好的体验。所以只有使用PreviewKeyDown事件了。基本方式如上面。

WPF 限制Textbox输入的内容的更多相关文章

  1. WPF 自定义TextBox带水印控件,可设置圆角

    一.简单设置水印TextBox控件,废话不多说看代码: <TextBox TextWrapping="Wrap" Margin="10" Height=& ...

  2. WPF IP地址输入控件的实现

    一.前言 WPF没有内置IP地址输入控件,因此我们需要通过自己定义实现. 我们先看一下IP地址输入控件有什么特性: 输满三个数字焦点会往右移 键盘←→可以空光标移动 任意位置可复制整段IP地址,且支持 ...

  3. WPF 设置TextBox为空时,背景为文字提示

    WPF 设置TextBox为空时,背景为文字提示.   <TextBox FontSize="17" Height="26" Margin="2 ...

  4. WPF拖动DataGrid滚动条时内容混乱的解决方法

    WPF拖动DataGrid滚动条时内容混乱的解决方法 在WPF中,如果DataGrid里使用了模板列,当拖动滚动条时,往往会出现列表内容显示混乱的情况.解决方法就是在Binding的时候给Update ...

  5. WPF自定义TextBox及ScrollViewer

    原文:WPF自定义TextBox及ScrollViewer 寒假过完,在家真心什么都做不了,可能年龄大了,再想以前那样能专心坐下来已经不行了.回来第一件事就是改了项目的一个bug,最近又新增了一个新的 ...

  6. [JS] 文本框判断输入的内容是否为数字

    可以通过触发文本框的onchange事件来对输入的内容进行判断是否为数字 文本框的属性设置: 把onchange的属性对应的js函数写好即可 参数传输的是当前控件的value值,即text值 < ...

  7. mailto实现将用户在网页中输入的内容传递到本地邮件客户端

    背景: 想在自己的网站中有这样一个设计: 用户点击提交按钮之后,就会打开本地邮件客户端,并自动将他在输入框中输入的内容作为邮件的内容,像下面这样: mailto可以帮助实现这个功能. 简介: mail ...

  8. jquery+php实现用户输入搜索内容时自动提示

    index.html <html> <head>     <meta charset=;} #search_auto li a:hover{background:#D8D ...

  9. Android控件之MultiAutoCompleteTextView(自动匹配输入的内容)

    一.功能 可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,可用在发送短信,发邮件时选择联系人这种类型中 二.独特属性 android:comp ...

随机推荐

  1. Linux操作系统学习_操作系统是如何工作的

    实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...

  2. POJ 3348 Cows

    题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了. ...

  3. python cookbook学习笔记 第一章 文本(2)

    1.6合并字符串 ka=list('kaluoc') #字符串转成字符串列表 print ''.join(ka) #大量的字符串相连,join是最高效的 print '%s%s something % ...

  4. GetWindowRect和GetClientRect的区别详解

    一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? ...

  5. 导入excle数据

    导入excle数据 1.if (File.Exists(strFileName)) // 当文件存在时             {                 m_fileName = strFi ...

  6. a5站长论坛和s8站长论坛-网上兼职做任务赚钱的两大网站

     1.什么是做任务赚钱? 简而言之,就是你做别人不在行而你在行的技术 ,如 图片美化 网站建设 网站修改 网站推广等网络业务. 2.任务赚钱有什么特点? 完全免费,你付出的是技术和时间,完全免费,不过 ...

  7. 项目开发之分页---异步分页(ajax)

    PS:前面忘了给大家讲解后台需要做的 ,同步分页的时候,我们只需要定义一个方法,给前台传递一个page对象,前台接收到直接展示即可:异步分页要多一步,首先还是写一个方法,传递初始对象,后面的ajax返 ...

  8. python3.4 data type

    #coding=utf-8 #Python 3.4 https://docs.python.org/3.4/library/ #IDE:Eclipse +PyDev Window10 import a ...

  9. [nodejs,expressjs,angularjs2] LOL英雄列表数据抓取及查询显示应用

    新手练习,尝试使用angularjs2 [angularjs2 数据绑定,监听数据变化自动修改相应dom值,非常方便好用,但与传统js(jquery)的使用方法会很不同,Dom操作也不太习惯] 应用效 ...

  10. LDA进阶(Dynamic Topic Models)

    转自:http://blog.csdn.net/hxxiaopei/article/details/8034308 http://blog.csdn.net/huagong_adu/article/d ...