亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

WPF TextBox實現按字節長度限制輸入功能

2019-10-29 21:09:01
字體:
來源:轉載
供稿:網友

前兩天做一個項目的時候,由于頁面沒有限制TextBox的輸入長度,所以,后臺直接報錯了,超出數據庫最大的長度。

數據庫的長度是按照字節來計算的,而且不同的編碼格式,漢字占用的字節長度又不相同,比如,我們用的是UTF8,一個漢字是3個字節,而默認的Default,一個漢字是2個字節。

TextBox有個MaxLength屬性,但是這個屬性是不太合乎要求的,因為這個長度,是限制了輸入的長度,比如設置20,則無論是數字、字母、漢字最大的長度都是20個,但是,對于數據庫來說,長度卻不相同了,所以,不能使用這個屬性。

為了,統一解決下這個問題,所以給TextBox寫了附加屬性。

一、想要的效果

用了附加屬性,想達到一個什么效果呢,就是像設置MaxLength一樣,一旦到了數據庫的字節長度,就不再能輸入了。

因此,最開始想找一個限制輸入的屬性,可惜我學的太淺薄,沒有找到相關的屬性,因此,最后在同事的提醒下,可以記錄上一次的內容,然后,如果超長,就用上一次的內容進行賦值

WPF,TextBox,字節長度

WPF,TextBox,字節長度

二、附加屬性

既然要用附加屬性,并且方便使用,那肯定要給開發者暴露出來至少兩個:MaxByteLength用來設置最大的字節數,EncodeModel用來設置編碼格式

EncodeModel是用Menu類型來做的,方便使用時直接敲內容

WPF,TextBox,字節長度

本來上面是直接想用Encoding來做的,奈何它是抽象類,只好,寫個方法進行了一部轉化,并且把Encoding類型的屬性進行private。

大致上也就是這么一個思路,下面上代碼,給需要的人使用。

public class MaxByteAttachedProperty : DependencyObject { public enum Encode {  Default,  ASCII,  UTF8,  UTF32,  UTF7,  BigEndianUnicode,  Unicode } private static string GetPreText(DependencyObject obj) {  return (string)obj.GetValue(PreTextProperty); } private static void SetPreText(DependencyObject obj, string value) {  obj.SetValue(PreTextProperty, value); } // Using a DependencyProperty as the backing store for PreText. This enables animation, styling, binding, etc... private static readonly DependencyProperty PreTextProperty =  DependencyProperty.RegisterAttached("PreText", typeof(string), typeof(MaxByteAttachedProperty), new PropertyMetadata("")); public static int GetMaxByteLength(DependencyObject obj) {  return (int)obj.GetValue(MaxByteLengthProperty); } public static void SetMaxByteLength(DependencyObject obj, int value) {  obj.SetValue(MaxByteLengthProperty, value); } // Using a DependencyProperty as the backing store for MaxByteLength. This enables animation, styling, binding, etc... public static readonly DependencyProperty MaxByteLengthProperty =  DependencyProperty.RegisterAttached("MaxByteLength", typeof(int), typeof(MaxByteAttachedProperty), new PropertyMetadata(OnTextBoxPropertyChanged)); private static void OnTextBoxPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {  TextBox tb = d as TextBox;  if (tb == null)  {  return;  }  tb.TextChanged += Tb_TextChanged; } private static void Tb_TextChanged(object sender, TextChangedEventArgs e) {  TextBox tb = sender as TextBox;  if (IsOutMaxByteLength(tb.Text, tb))  {  tb.Text = GetPreText(tb);  tb.Select(tb.Text.Length, 0);  return;  } } public static Encode GetEncodeModel(DependencyObject obj) {  return (Encode)obj.GetValue(EncodeModelProperty); } public static void SetEncodeModel(DependencyObject obj, Encode value) {  obj.SetValue(EncodeModelProperty, value); } // Using a DependencyProperty as the backing store for EncodeM. This enables animation, styling, binding, etc... public static readonly DependencyProperty EncodeModelProperty =  DependencyProperty.RegisterAttached("EncodeModel", typeof(Encode), typeof(MaxByteAttachedProperty), new PropertyMetadata(Encode.UTF8, OnEncodeModelChanged)); private static void OnEncodeModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {  SetEM(d, GetEncodeModel(d)); } private static Encoding GetEncodingModel(DependencyObject obj) {  return (Encoding)obj.GetValue(EncodingModelProperty); } private static void SetEncodingModel(DependencyObject obj, Encoding value) {  obj.SetValue(EncodingModelProperty, value); } // Using a DependencyProperty as the backing store for EncodingModel. This enables animation, styling, binding, etc... private static readonly DependencyProperty EncodingModelProperty =  DependencyProperty.RegisterAttached("EncodingModel", typeof(Encoding), typeof(MaxByteAttachedProperty), new PropertyMetadata(Encoding.UTF8)); private static void SetEM(DependencyObject obj, Encode e) {  switch (e)  {  case Encode.Default:   SetEncodingModel(obj, Encoding.Default);   break;  case Encode.ASCII:   SetEncodingModel(obj, Encoding.ASCII);   break;  case Encode.UTF8:   SetEncodingModel(obj, Encoding.UTF8);   break;  case Encode.UTF32:   SetEncodingModel(obj, Encoding.UTF32);   break;  case Encode.UTF7:   SetEncodingModel(obj, Encoding.UTF7);   break;  case Encode.BigEndianUnicode:   SetEncodingModel(obj, Encoding.BigEndianUnicode);   break;  case Encode.Unicode:   SetEncodingModel(obj, Encoding.Unicode);   break;  default:   break;  } } private static bool IsOutMaxByteLength(string txt, DependencyObject obj) {  int txtLength = GetEncodingModel(obj).GetBytes(txt).Length;//文本長度  if (GetMaxByteLength(obj) >= txtLength)  {  SetPreText(obj, txt);  return false;  }  return true; } }

使用方法如下:

WPF,TextBox,字節長度

MaxByteLength是必須設置的沒有進行默認,EncodeModel可以不設置但是由于是我們自己用,所以默認是UTF8,可以自行修改代碼,按照你們公司的編碼格式,這樣也就不用賦值了。

 代碼已修正,感謝Presia發現的BUG,疏忽了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产一区二区| 中文字幕在线国产精品| 日韩高清电影免费观看完整版| 国产婷婷色综合av蜜臀av| 国产日韩在线精品av| 欧美成人激情在线| 国产精品美女网站| 欧美电影免费观看网站| 成人av.网址在线网站| 97国产精品免费视频| 九九热这里只有精品6| 欧美三级免费观看| 国产精品久久久久9999| 日韩精品中文字幕有码专区| 中日韩美女免费视频网站在线观看| 亚洲影院高清在线| 91精品国产综合久久久久久久久| 国产精品揄拍一区二区| 欧美老女人bb| 国产成+人+综合+亚洲欧美丁香花| 亚洲欧洲av一区二区| 欧美理论片在线观看| 日韩视频永久免费观看| 国产精品久久二区| 国产成人精品网站| 久久精品美女视频网站| 国产91成人在在线播放| 欧美视频专区一二在线观看| 国产suv精品一区二区三区88区| 国语自产精品视频在线看一大j8| 久久久国产成人精品| 欧美成人中文字幕在线| 欧美精品免费播放| 日韩h在线观看| 国产精品久久视频| 久久99精品久久久久久噜噜| 国产91精品网站| 久久精品久久精品亚洲人| 91在线视频成人| 亚洲自拍在线观看| 在线播放国产精品| 国产在线精品播放| 久久夜精品香蕉| 亚洲女人天堂视频| 欧美激情xxxx性bbbb| 久久免费少妇高潮久久精品99| 欧美电影免费看| 欧美性色xo影院| 精品欧美一区二区三区| 国产成人综合一区二区三区| 国产一区二区黑人欧美xxxx| 免费91麻豆精品国产自产在线观看| 成人激情视频在线播放| 日本不卡高字幕在线2019| 欧美又大又硬又粗bbbbb| 日本三级久久久| 欧美电影免费播放| 日韩女优在线播放| 欧美性高潮床叫视频| 亚洲一区二区三区四区在线播放| 日韩视频欧美视频| 91精品在线播放| 欧美性猛交xxxx| 国产精品精品久久久久久| 国产精品流白浆视频| 国产伦精品免费视频| 亚洲欧洲国产一区| 国产精品中文在线| 久久久久久亚洲精品不卡| 亚洲欧美日本精品| 国产精品爽爽爽| 国产91精品不卡视频| 中文字幕日本精品| 97婷婷大伊香蕉精品视频| 久久国产视频网站| 久久综合88中文色鬼| 黑人精品xxx一区一二区| 亚洲精品白浆高清久久久久久| 国产欧美va欧美va香蕉在| 日韩av高清不卡| 欧美黑人又粗大| 国产成人综合一区二区三区| 亚洲精品视频免费| 成人国产精品一区| 日韩欧美亚洲成人| 亚洲一区二区在线播放| 97国产精品久久| 一区二区三区视频免费| 欧美在线播放视频| 国产精品96久久久久久| 午夜精品一区二区三区在线视| 日韩一区二区三区在线播放| 美日韩在线视频| 中文字幕精品av| 九九热这里只有在线精品视| 亚洲欧美色婷婷| 国产成+人+综合+亚洲欧美丁香花| 亚洲天堂av网| 亚洲摸下面视频| 欧美视频精品一区| 亚洲国产精品久久久久久| 91久久在线视频| 北条麻妃一区二区在线观看| 久久久久久久久久久久久久久久久久av| 欧美一区二三区| 久久艳片www.17c.com| 久久精品国产欧美亚洲人人爽| 亚洲欧美国产制服动漫| 精品国产91乱高清在线观看| 欧美性少妇18aaaa视频| 亚洲无线码在线一区观看| 浅井舞香一区二区| 亚洲精品综合久久中文字幕| 欧美大秀在线观看| 69av在线播放| 日韩免费高清在线观看| 日韩最新在线视频| 欧美成人精品三级在线观看| 91精品国产亚洲| 亚洲国产成人爱av在线播放| 中文字幕免费国产精品| 亚洲免费一在线| 尤物99国产成人精品视频| 亚洲欧美日韩爽爽影院| 亚洲精品美女久久久| 亚洲国产又黄又爽女人高潮的| 国产香蕉97碰碰久久人人| 欧美成人激情在线| 国产一区二区三区精品久久久| 4p变态网欧美系列| 91精品国产高清久久久久久91| 亚洲天天在线日亚洲洲精| 亚洲欧美日韩爽爽影院| 中文字幕久久久av一区| 亚洲国产欧美一区二区三区同亚洲| 黑人巨大精品欧美一区二区免费| 亚洲第一视频在线观看| 成人黄色片在线| 亚洲综合中文字幕在线观看| 国产精品69av| 国产精品jvid在线观看蜜臀| 91在线视频九色| 亚洲天堂日韩电影| 亚洲国产成人精品久久久国产成人一区| 成人中文字幕+乱码+中文字幕| 日韩一区二区三区xxxx| 精品国产一区二区三区久久久| 久久精品视频亚洲| xxx欧美精品| 国产99在线|中文| 在线观看久久av| 久久91亚洲精品中文字幕奶水| 色偷偷91综合久久噜噜| 精品久久久久久久久久ntr影视| 国产精品久久久久久久久久东京| 久久久久久国产精品久久| 大胆人体色综合| 在线视频欧美日韩| 在线免费观看羞羞视频一区二区| 中文字幕欧美在线| 亚洲国产精品人久久电影| 国产精品自拍小视频| 2019中文在线观看| 日本最新高清不卡中文字幕|