WPF中TextBox限制输入不起作用的问题

最近再用textbox做限制输入时遇到一个莫名其妙的问题:

首先看代码:

<TextBox  Name="txtip1" Height="40" Width="60" FontSize="20"  MaxLength="3"  TextChanged="TextBox_TextChanged">

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            try
            {
                //屏蔽中文输入和粘贴输入
                System.Windows.Controls.TextBox textBox = sender as System.Windows.Controls.TextBox;
                if (textBox == null) return;
                TextChange[] change = new TextChange[e.Changes.Count];
                e.Changes.CopyTo(change, 0);

int offset = change[0].Offset;
                if (change[0].AddedLength > 0)
                {
                    double num = 0;
                    if (!Double.TryParse(textBox.Text, out num))
                    {
                        textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
                        textBox.Select(offset, 0);
                    }
                }

if (ComConvert.TryInt(textBox.Text) > 255)
                {
                    textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1);

textBox.SelectionStart = textBox.Text.Length;
                }
            }
            catch (Exception ex)
            {
                WinMessage.Show("输入数字有问题,请重新输入!");
            }

}

感觉代码没有一点问题,可代码运行时,发现所做的限制不起作用,如果把textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1); 这一句注释掉,虽然MaxLength属性又生效了,但是又不能限制数字不大于255,而且中文输入法还是可以输入。原本以为在TextChanged事件中再判断一下长度就好了,测试却发现只能生效一次,后面就又不起作用了。又尝试了KeyDown事件,发现还是一样。怎么办呢?

解决方法很简单:只要在TextBox中将InputMethod.IsInputMethodEnabled属性设为false即可,该属性还可以屏蔽中文输入法

时间: 2024-10-04 16:16:36

WPF中TextBox限制输入不起作用的问题的相关文章

WPF 中TextBox 增加输入检测,错误提示

先来总结下实现错误提示功能的几个要点 1:binding 的ValidationRules 2 :Validation.ErrorTemplate 首先我们在界面添加一个TextBox, Text绑定到people对象的属性age public class People { public int age { get; set; } public string name { get; set; } } <TextBox x:Name="textBox" HorizontalAlig

wpf 限制textbox只能输入数字及特殊键

原文:wpf 限制textbox只能输入数字及特殊键 使用vs2015进行wpf设计时,发现限制输入数字时,Keydown事件无法检测到空格的输入,后经过查资料调试,发现PreviewKeyDown可以满足检测输入所有值合法性的要求,我的textbox输入框中只允许输入(大小键盘中)的数字0-9,以及删除回车,左右方向键,tab键,删除键,下面代码为限制 private void MinSpaceTextBox_PreviewKeyDown(object sender, KeyEventArgs

WPF中textbox加入文件拖放操作

namespace WpfApplication1{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void textbox1_PreviewDragOver(object sender, DragEventArgs e) { e.Effects = DragDropEffects.Copy; e.Handled = true; } private

解决WPF中TextBox文件拖放问题

在WPF中,当我们尝试向TextBox中拖放文件,从而获取其路径时,往往无法成功(拖放文字可以成功).造成这种原因关键是WPF的TextBox对拖放事件处理机制的不同,具体可参考这篇文章Textbox Drag/Drop in WPF,本文只是介绍如何解决这一问题. 解放方法如下: 使用PreviewDragOver和PreviewDrop事件代替DragOver和Drop事件. <TextBox Height="100″ PreviewDragOver="TextBox_Pre

关于WPF中TextBox行的选择与显示的问题

声明:本文是本人在51CTO上的一篇博文,今天打算将其转载到博客园,以方便自己查阅.原文地址为:http://kestrelsaga.blog.51cto.com/3015222/1542584 最近做了一个小工具,其中用到了WPF中的TextBox控件.对于这个控件的使用,其中主要的一个功能是需要选择指定的行,并将其显示在控件可见区域的视图中(如果不在可视区域时,需要控件自动滚动到改行).在我使用时,发现一个问题,如果当我先将指定的行滚动至视图中,然后在将其选中,则经常会不稳定,有时能定位并选

WPF中TextBox在.NET 4.5无法输入浮点数

最近发现一个很奇怪的现象,TextBox中的Text绑定double型数据,触发条件UpdateSourceTrigger=PropertyChanged时,在.net4.5框架下无法输入小数点,而在.net 4.0之前的框架不存在这个问题. 解决办法 修改Xmal中的StringFormat <Grid> <TextBox Text="{Binding Score,UpdateSourceTrigger=PropertyChanged, StringFormat={}{0}}

winform 中TextBox只能输入数字

textBox1.KeyPress+=TextNumber_KeyPress; private void TextNumber_KeyPress(object sender, KeyPressEventArgs e) { var tb = (TextBox) sender; if (e.KeyChar != Convert.ToChar(13)) { if (e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) { MessageShow("只能

WPF限制TextBox只能输入数字

KeyDown事件private void tbCount_KeyDown(object sender, KeyEventArgs e) { TextBox txt = sender as TextBox; //屏蔽非法按键 if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal || e.Key.ToString() == "Tab") { if (txt.Tex

WPF中TextBox的PreviewMouseLeftButtonUp事件

当使用TextBox的PreviewMouseLeftButtonUp事件时(例如,鼠标点击进入TextBox时,清除当前的输入内容),会很意外地发现,这时候不论怎么点击都无法点击到其他控件,焦点一直被文本框占用着. 解决办法及测试用例如下: 界面 1 <Window x:Class="learnwpf.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"