国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - WPF TextBox實現按字節長度限制輸入功能

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

2022-01-25 14:20衆尋 C#

這篇文章主要為大家詳細介紹了WPF TextBox實現按字節長度限制輸入功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

一、想要的效果

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

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

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

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

二、附加屬性

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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,疏忽了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/ZXdeveloper/archive/2017/11/07/7798943.html

延伸 · 閱讀

精彩推薦
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 凹凸国产成人精品视频免费 | 黑人精品欧美一区二区蜜桃 | 亚洲一区二区三区在线播放 | 欧美精品1区2区 | 欧美黄色a视频 | 欧美精品在线观看 | 欧洲一区二区三区 | 狠狠操狠狠干 | 亚洲久久久久久 | 亚洲欧美精品一区二区三区 | 亚洲精品视频在线免费播放 | 免费黄色小视频 | 国产精品一二区 | av在线免费观看网站 | 日韩综合一区 | 成版人性视频 | 嫩草网址| 国产日韩在线视频 | 欧美日本韩国一区二区三区 | 欧美日韩不卡 | 久久久国产精品免费 | 一区二区三区在线 | 欧美精品一区二区三区在线播放 | 成人三区 | 中文字幕影视 | 国产视频自拍一区 | 久久精品欧美 | 91久久国产综合久久 | 在线视频国产一区 | 亚洲国产精品一区二区久久,亚洲午夜 | 午夜视频一区 | 天天爽视频 | 国产欧美精品一区二区三区 | 久久香蕉国产 | h网站在线观看 | 成人一级黄色大片 | 久久精品国产99国产 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美高清成人 | 中文在线视频 | 特黄特色大片免费视频观看 |