限制文本框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. addEventListener和attachEvent以及element.onclick的区别

    addEventListener和attachEvent以及element.onclick的区别 attachEvent是ie添加事件处理程序,接收两个参数,其中事件类型名称要加"on&qu ...

  2. HTTP状态码的意义

    100系列码 从100到199范围的HTTP状态码是信息报告码.基于各种原因考虑,大多数情况下我们是 很少看见这些代码的.首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示 ...

  3. 常用的模式、JSON与DTO

    表现层的设计(一)——常用的模式.JSON与DTO 上几篇博文介绍了 业务逻辑层和数据访问层,我认为写博文的作用主要是向业界的读者交流一种思想,点到为止,至于学习架构设计,通过几篇博文是讲不清楚的,还 ...

  4. JavaEE:Cookie和Session

    Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样web资源处理的就是用户各自的数据了. ...

  5. 采用SOLR进行全文索引的完整解决方案,设计图

  6. java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent

    07-24 09:58:23.239: E/AndroidRuntime(29487): FATAL EXCEPTION: main 07-24 09:58:23.239: E/AndroidRunt ...

  7. 关于iOS 5 Could not instantiate class named NSLayoutConstraint错误

    因为使用Xcode 4.6.2,新建工程的时候SDK 6.1,但是要做低版本适配.在将iOS模拟器选为5.0编译运行时候出现Could not instantiate class named NSLa ...

  8. JAVA线程间的状态转换

    线程间的状态转换:  1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运 ...

  9. mysql 数据库 简单存储过程游标使用

    BEGIN #Routine body goes here... DECLARE no_more_record INT DEFAULT 0; DECLARE TEST_ID INT(20); DECL ...

  10. jQuery2.x源码解析(DOM操作篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) jQuery这个类库最为核心重要的功能就是DOM ...