silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight限制TextBox只能输入整数或者小数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

http://www.cnblogs.com/greatverve/archive/2010/06/25/silverlight-textbox-limit.html Silverlight功能还不完善,简化了一下WebForm或者WinForm的同类方法。 大气象 private   void  txtRoomNum_KeyDown( object  sender, KeyEventArgs e

http://www.cnblogs.com/greatverve/archive/2010/06/25/silverlight-textBox-limit.html

Silverlight功能不完善,简化了一下WebForm或者WinForm的同类方法

Silverlight限制TextBox只能输入整数或者小数

Silverlight限制TextBox只能输入整数或者小数

大气象
private   void  txtRoomNum_KeyDown( object  sender, KeyEventArgs E)
{
    textBox txt 
=  sender  as  textBox;
    
// 屏蔽非法按键,只能输入整数
     if  ((e.Key  >=  Key.NumPad0  &&  e.Key  <=  Key.NumPad9))
    {
        e.Handled 
false ;
    }
    
else
    {
        e.Handled 
true ;
    }
}

 txtRoomArea_KeyDown( 屏蔽非法按键,只能输入小数  Key.NumPad9)  || ==  Key.decimal)
    {
        
 (txt.Text.Contains( " . "  Key.decimal)
        {
            e.Handled 
;
            
return ;
        }
        e.Handled 
;
    }

}

Silverlight限制TextBox只能输入整数或者小数

 

一:
以下实现TextBox只能输入小数并且屏蔽中文输入和非法粘贴:
说明:以下实现均在Framework 3.0平台下

为TextBox加两个事件:TextChanged和KeyDown事件,具体如下:
KeyDown事件:

 1

Silverlight限制TextBox只能输入整数或者小数

private   void  textBox_KeyDown( object :rgb(0, System.Windows.Input.KeyEventArgs E)
 2

Silverlight限制TextBox只能输入整数或者小数

        
{
 3

Silverlight限制TextBox只能输入整数或者小数

            textBox txt 
= sender as textBox;
 4

Silverlight限制TextBox只能输入整数或者小数


 5

Silverlight限制TextBox只能输入整数或者小数

             
//屏蔽非法按键
 6

Silverlight限制TextBox只能输入整数或者小数

            if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ||== Key.decimal)
 7

Silverlight限制TextBox只能输入整数或者小数

            
 8

Silverlight限制TextBox只能输入整数或者小数

                
 (txt.Text.Contains("." 9

Silverlight限制TextBox只能输入整数或者小数

                
10

Silverlight限制TextBox只能输入整数或者小数

                    e.Handled 
 true;
11

Silverlight限制TextBox只能输入整数或者小数

                    
return12

Silverlight限制TextBox只能输入整数或者小数

                }
13

Silverlight限制TextBox只能输入整数或者小数

                e.Handled 
false14

Silverlight限制TextBox只能输入整数或者小数

            }
15

Silverlight限制TextBox只能输入整数或者小数

            
else (((e.Key  Key.D0  Key.D9)  Key.oemPeriod)  e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
16

Silverlight限制TextBox只能输入整数或者小数

            
17 Key.oemPeriod)
18

Silverlight限制TextBox只能输入整数或者小数

                
19202122232425

Silverlight限制TextBox只能输入整数或者小数

            
262728

Silverlight限制TextBox只能输入整数或者小数

        }

29

Silverlight限制TextBox只能输入整数或者小数


30

Silverlight限制TextBox只能输入整数或者小数

TextChanged事件
 textBox_TextChanged( :rgb(0, textChangedEventArgs E)

Silverlight限制TextBox只能输入整数或者小数

        
屏蔽中文输入和粘贴输入            textBox textBox 

Silverlight限制TextBox只能输入整数或者小数

            textChange[] change 
new textChange[e.Changes.Count];

Silverlight限制TextBox只能输入整数或者小数

            e.Changes.CopyTo(change, 
0);
int offset  change[].offset;
 (change[].AddedLength > )

Silverlight限制TextBox只能输入整数或者小数

            
double num  (!Double.TryParse(textBox.Text, out num))

Silverlight限制TextBox只能输入整数或者小数

                

Silverlight限制TextBox只能输入整数或者小数

                    textBox.Text 
 textBox.Text.Remove(offset, change[].AddedLength);

Silverlight限制TextBox只能输入整数或者小数

                    textBox.SELEct(offset,128)">19
20

Silverlight限制TextBox只能输入整数或者小数

值得注意的是TextChange类,是Framework 3.0SP1和3.5中新增的,3.0本身是没有的

二:C#Winform下用正则表达式限制TextBox只能输入数字
昨天,在网上特别是园子里搜了下如何在Winform下限制TextBox只能输入数字功能。可是结果基本上都是在web的环境下用正则表达式实现的,而在Winform的平台下,好像没有发现。   就自己循着思路实现了下。

首先,先定义一个String,用来表示数字的正则表达式:
 

Silverlight限制TextBox只能输入整数或者小数

privateString pattern @"^[0-9]*$;

然后再定义一个
,用来记录TextBox原来的内容,以便在输入@R_977_11058@时候,文本框的内容可以恢复到原来的值(我不知道TextBox怎么恢复到上一次的内容,只能采用这个笨办法了):

Silverlight限制TextBox只能输入整数或者小数

String  param1  = null ;


接着,我们就可以在textBox的TextChanged事件中判断输入的是否是数字,如果是数字,那么就把文本框的内容保存在param1中;如果不是数字,那么取消这次输入,即重新设置文本框的内容为param1:

        private  textBoxParam1_TextChanged( :rgb(0, EventArgs E)

Silverlight限制TextBox只能输入整数或者小数

        
{

Silverlight限制TextBox只能输入整数或者小数

            Match m 
 regex.Match(this.textBoxParam1.Text, pattern);    匹配正则表达式

Silverlight限制TextBox只能输入整数或者小数


Silverlight限制TextBox只能输入整数或者小数

            
@H_503_184@m.success)   
 输入的不是数字

Silverlight限制TextBox只能输入整数或者小数

            {

Silverlight限制TextBox只能输入整数或者小数

                
.textBoxParam1.Text  param1;    textBox内容不变

Silverlight限制TextBox只能输入整数或者小数


Silverlight限制TextBox只能输入整数或者小数

                
 将光标定位到文本框的最后                .textBoxParam1.SELEctionStart .textBoxParam1.Text.Length;

Silverlight限制TextBox只能输入整数或者小数

            }
    输入的是数字

Silverlight限制TextBox只能输入整数或者小数

            {

Silverlight限制TextBox只能输入整数或者小数

                param1 
.textBoxParam1.Text;    将现在textBox的值保存下来

Silverlight限制TextBox只能输入整数或者小数

            }

Silverlight限制TextBox只能输入整数或者小数

        }


这样,就基本上实现了用正则表达式限制TextBox输入数字了。
其他的现在也是类似,只要设定比较的正则表达式的内容即可。

三:Silverlight开发中的疑难杂症-控件设计篇-如何实现一个NumericBox(上) 

在最近的Silverlight开发中,发现一个需求,需要一个只能够输入数字,并且能够对小数点后的位数进行控制并填充的控件,原有的TextBox并不能实现这一个功能,于是就决定自己实现一个,要包含的具体的功能如下:

只能输入0-9的数字和至多一个小数点;

能够屏蔽通过非正常途径的不正确输入(输入法,粘贴等);

能够控制小数点后的最大位数,超出位数则无法继续输入;

能够选择当小数点数位数不足时是否补0

去除开头部分多余的0(为方便处理,当在开头部分输入0时,自动在其后添加一个小数点);

由于只能输入一个小数点,当在已有的小数点前再次按下小数点,能够跳过小数点;

在实现前参了许多网上的相关资料,没有找到具体的实现代码,但是还是得到了很多有用的思路,最终决定将上述功能分成两个部分来实现:其中控制只能输入数字的部分作为一个通用的TextBoxFilterBehavior进行设计;而格式化的部分则在NumericBox内部实现,下面首先介绍TextBoxFilterBehavior的实现。

在实现之前,首先查看了TextBox的相关事件,发现Silverlight中的事件比WPF来说有了很大的减少,没得选择,可用的事件只有KeyDownTextChanged。这里使用KeyDown事件来处理按键产生的输入,TextChanged事件来处理通过其它方式进行的输入(其实完全可以都在TextChanged事件中进行处理,我也想不通为什么自己选择分开进行~)。

由于要做一个通用的TextBox筛选行为,所以这里添加一个筛选类型的枚举选项TextBoxFilterOptions,里面暂时只有数字、小数点跟字母,留待以后扩充,实现代码如下:

Silverlight限制TextBox只能输入整数或者小数

Silverlight限制TextBox只能输入整数或者小数

TextBoxFilterOptions
 1  ///   <sumMary>  2        textBox筛选选项
 3  </sumMary>
 4      [Flags]
 5  public enum  textBoxFilterOptions
 6      {
 7            8   不采用任何筛选
 9  10          None  0 ,
11  12   数字类型不参与筛选
13  14          Numeric  1 15  16   字母类型不参与筛选
17  18          Character  2 19  20   小数点不参与筛选
21  22          Dot  4 23  24   其它类型不参与筛选
25  26          Other  8 27      }
28  29  30   textBox筛选选项枚举扩展方法
31  32  static class  textBoxFilterOptionsExtension
33  34  35   在全部的选项中是否包含指定的选项
36  </sumMary> 37  <param NAME="allOptions"> 所有的选项 </param> 38  <param NAME="option"> 指定的选项 39  <returns></returns> 40           bool  ContainsOption( this  textBoxFilterOptions allOptions, textBoxFilterOptions option)
41          {
42                (allOptions  &  option)   option;
43          }
44  45 

Silverlight限制TextBox只能输入整数或者小数

其中ContainsOption方法一个提供了方便的枚举运算的扩展方法

       另外还增加一个键盘操作的帮助类KeyboardHelper,在实现时发现Silverlight中的按键比WPF中少了很多,甚至连主键盘上的小数点键(句号)都无法识别,这里使用了一个平台相关的keycode进行判别,如果有更好的方法请给我留言。代码如下:

Silverlight限制TextBox只能输入整数或者小数

Silverlight限制TextBox只能输入整数或者小数

KeyboardHelper
  1    2   键盘操作帮助类
  3    4   KeyboardHelper
  5    6    7   键盘上的句号键
  8    9  const int  OemPeriod  190 ;
 10   11  #region  Fileds  12   13   14   控制键
 15   16  readonly  List < Key >  _controlKeys  new  17                                                              {
 18                                                                  Key.BACk,128)"> 19                                                                  Key.CapsLock,128)"> 20                                                                  Key.Ctrl,128)"> 21                                                                  Key.Down,128)"> 22                                                                  Key.End,128)"> 23                                                                  Key.Enter,128)"> 24                                                                  Key.Escape,128)"> 25                                                                  Key.Home,128)"> 26                                                                  Key.Insert,128)"> 27                                                                  Key.Left,128)"> 28                                                                  Key.PageDown,128)"> 29                                                                  Key.PageUp,128)"> 30                                                                  Key.Right,128)"> 31                                                                  Key.Shift,128)"> 32                                                                  Key.Tab,128)"> 33                                                                  Key.Up
 34                                                              };
 35   36  #endregion  37   38   39   是否是数字键
 40   41  <param NAME="key"> 按键  42   43   IsDigit(Key key)
 44   45   shiftKey   (Keyboard.Modifiers   ModifierKeys.Shift)  !=  46   retVal;
 47  按住shift键后,数字键并不是数字键  48   (key   Key.D0   key   Key.D9  ! shiftKey)
 49              {
 50                  retVal   51              }
 52   53   54   Key.NumPad9;
 55   56   57   58   59   60   是否是控制键
 61   62   63   64   IsControlKeys(Key key)
 65   66   _controlKeys.Contains(key);
 67   68   69   70   是否是小数点
 71   Silverlight中无法识别问号左边的那个小数点键
 72   只能识别小键盘中的小数点
 73   74   75   76   IsDot(Key key)
 77   78   Key.decimal;
 79   80   81   82   83   84   85  <param NAME="keyCode"> 平台相关的按键代码  86   87   IsDot(Key key,   keyCodE)
 88   89   IsDot(key)   Key.UnkNow  keyCode   OemPeriod); 
 90   91   92   93   是否是字母键
 94   95   96   97   IsCharacter(Key key)
 98   99   Key.A   Key.Z;
100  101  102  最后是TextBoxFilterBehavior的实现,关于Behavior的相关概念,大家可以参Blend的帮助文档以及@H_352_1594@mSDN的相关文章,园子里也有很多大牛对它进行了详细的阐述,我就不深入讲解了。在这里,我们首先添加一个TextBoxFilterOptions类型的依赖属性,用来设置过滤的选项,如下:

Silverlight限制TextBox只能输入整数或者小数

Silverlight限制TextBox只能输入整数或者小数

Dependency Properties @H_944_1626@
 1   Dependency Properties  4   textBox筛选选项,这里选择的为过滤后剩下的按键
 控制键不参与筛选,可以多选组合
 7   textBoxFilterOptions textBoxFilterOptions
get  {   (TextBoxFilterOptions)GetValue(TextBoxFilterOptionsProperty); }
10  set  { SETVALue(TextBoxFilterOptionsProperty, value); }
 Using a DependencyProperty as the backing store for textBoxFilterOptions.  This enables animation, styling, binding, etc... 14   DependencyProperty textBoxFilterOptionsProperty              DependencyProperty.Register( TextBoxFilterOptions typeof (TextBoxFilterOptions),0)">(TextBoxFilterBehavior),0)"> PropertyMetadata(TextBoxFilterOptions.NonE));
18  然后注册了关联的TextBox控件的KeyDownTextChanged事件,在里面对输入的文本进行了验证,如果没有通过验证,则将文本充值回上次正确的文本。由于在TextChanged事件中并没有WPF里面的TextChange数组,所以无法拿到本次变更的文本,只能选择处理完整的Text完整的代码如下:

Silverlight限制TextBox只能输入整数或者小数

Silverlight限制TextBox只能输入整数或者小数

TextBoxFilterBehavior
 textBox筛选行为,过滤不需要的按键
 textBoxFilterBehavior : Behavior TextBox String  _prevText  .Empty;
 textBoxFilterBehavior()
  9   16   18  protected override  OnAttached()
base .onAttached();
.AssociatedObject.KeyDown  +=  KeyEventHandler(AssociatedObject_KeyDown);
.AssociatedObject.TextChanged   textChangedEventHandler(AssociatedObject_TextChanged);
 OnDetaching()
.onDetaching();
-=  43   Events  处理通过其它手段进行的输入
<param NAME="sender"></param> <param NAME="e"></param>  53   AssociatedObject_TextChanged( :1.5; color:rgb(0, textChangedEventArgs E)
如果符合规则,就保存下来  (IsValidText( .AssociatedObject.Text))
                _prevText  .AssociatedObject.Text;
如果不符合规则,就恢复为之前保存的值  
                  SELEcTindex  .AssociatedObject.SELEctionStart  -  ( .AssociatedObject.Text.Length   _prevText.Length);                
 64  .AssociatedObject.Text   _prevText;
 SELEcTindex;
 处理按键产生的输入
 75   AssociatedObject_KeyDown( :1.5; color:rgb(0, KeyEventArgs E)
 76   handled  不进行过滤  (TextBoxFilterOptions   textBoxFilterOptions.None                  KeyboardHelper.IsControlKeys(e.Key))
                handled  数字键  (handled   textBoxFilterOptions.ContainsOption(TextBoxFilterOptions.NumeriC))
 87  KeyboardHelper.IsDigit(e.Key);
小数点  textBoxFilterOptions.ContainsOption(TextBoxFilterOptions.Dot))
(KeyboardHelper.IsDot(e.Key, e.PlatformKeyCodE)  _prevText.Contains( ));
 (KeyboardHelper.IsDot(e.Key,0)"> _prevText.Contains( ))
                {
                     如果输入位置的下一个就是小数点,则将光标跳到小数点后面 .AssociatedObject.SELEctionStart  _prevText[ .AssociatedObject.SELEctionStart]  ' ' )
 97                      {
                         ++                     }                    
                }
字母 103   textBoxFilterOptions.ContainsOption(TextBoxFilterOptions.Character))
104  105  KeyboardHelper.IsDot(e.Key);
106  107              e.Handled   handled;
108  109  110  111  112   Private Methods 113  114  115   判断是否符合规则
116  117  <param NAME="c"></param> 118  119   IsValidChar( char  C)
120  121   textBoxFilterOptions.NonE)
122  123  124  125   (TextBoxFilterOptions.ContainsOption(TextBoxFilterOptions.NumeriC)  126                   0  c  9 127  128  129  130   (TextBoxFilterOptions.ContainsOption(TextBoxFilterOptions.Dot)  131                  c  132  133  134  135   (TextBoxFilterOptions.ContainsOption(TextBoxFilterOptions.Character)) 
136  137   (( A Z  ( a z 138  139  140  141  142  143  144  145  146   判断文本是否符合规则
147  148  <param NAME="text"></param> 149  150   IsValidText(  text)
151  152  只能有一个小数点 153   (text.IndexOf(  text.LasTindexOf( 154  155  156  157  158  foreach in 159  160  IsValidChar(C))
161  162  163  164  165  166  167  168  169  170 
TextBoxFilterBehavior类主要的实现思路和代码就是这样,希望能给需要的朋友一定的帮助,NumericBox类的实现思路及相关代码我将在下篇文章中给出,敬请关注。

大佬总结

以上是大佬教程为你收集整理的Silverlight限制TextBox只能输入整数或者小数全部内容,希望文章能够帮你解决Silverlight限制TextBox只能输入整数或者小数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。