BankAccountNumberTextBox.xaml.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. namespace Muchinfo.WPF.Controls.Textbox
  15. {
  16. /// <summary>
  17. /// BankAccountNumberTextBox.xaml 的交互逻辑
  18. /// </summary>
  19. public partial class BankAccountNumberTextBox:UserControl
  20. {
  21. public BankAccountNumberTextBox()
  22. {
  23. InitializeComponent();
  24. }
  25. public string Text
  26. {
  27. get { return (string)GetValue(TextProperty); }
  28. set { SetValue(TextProperty, value);}
  29. }
  30. public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(BankAccountNumberTextBox),new FrameworkPropertyMetadata(SetTextBoxValue){BindsTwoWayByDefault=true});
  31. private static void SetTextBoxValue(DependencyObject d, DependencyPropertyChangedEventArgs e)
  32. {
  33. (d as BankAccountNumberTextBox).txtBankAccountNumber.Text = e.NewValue.ToString();
  34. string NewTxt = (d as BankAccountNumberTextBox).txtBankAccountNumber.Text.Replace(" ", "");
  35. Char[] char1 = NewTxt.ToCharArray();
  36. StringBuilder sb = new System.Text.StringBuilder();
  37. for (int i = 0; i < NewTxt.Length; i++)
  38. {
  39. if (i != 0 && i % 4 == 0 && i <= 16)
  40. {
  41. sb.Append(" ");
  42. }
  43. sb.Append(char1[i]);
  44. }
  45. (d as BankAccountNumberTextBox).txtBankAccountNumber.Text = sb.ToString();
  46. (d as BankAccountNumberTextBox).txtBankAccountNumber.Select((d as BankAccountNumberTextBox).txtBankAccountNumber.Text.Length, 0);
  47. }
  48. private void txtBankAccountNumber_TextChanged(object sender, TextChangedEventArgs e)
  49. {
  50. try
  51. {
  52. //屏蔽中文输入和非法字符粘贴输入
  53. TextBox textBox = sender as TextBox;
  54. TextChange[] change = new TextChange[e.Changes.Count];
  55. e.Changes.CopyTo(change, 0);
  56. int offset = change[0].Offset;
  57. decimal numb = 0;
  58. if (change[0].AddedLength > 0)
  59. {
  60. if (!decimal.TryParse(textBox.Text.Replace(" ", ""), out numb))
  61. {
  62. textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
  63. textBox.Select(offset, 0);
  64. }
  65. Text = txtBankAccountNumber.Text.Replace(" ", ""); ;
  66. }
  67. }
  68. catch (System.Exception ex)
  69. {
  70. }
  71. }
  72. private void txtBankAccountNumber_KeyDown(object sender, KeyEventArgs e)
  73. {
  74. TextBox txt = sender as TextBox;
  75. //屏蔽非法按键
  76. if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))
  77. {
  78. e.Handled = false;
  79. }
  80. else if (((e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod) && e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
  81. {
  82. e.Handled = false;
  83. }
  84. else if (e.Key == Key.Tab)
  85. {
  86. e.Handled = false;
  87. }
  88. else
  89. {
  90. e.Handled = true;
  91. }
  92. }
  93. private void txtBankAccountNumber_KeyUp(object sender, KeyEventArgs e)
  94. {
  95. TextBox txt = sender as TextBox;
  96. string NewTxt = txt.Text.Replace(" ", "");
  97. Char[] char1 = NewTxt.ToCharArray();
  98. StringBuilder sb = new System.Text.StringBuilder();
  99. for (int i = 0; i < NewTxt.Length; i++)
  100. {
  101. if (i != 0 && i % 4 == 0 && i <= 16)
  102. {
  103. sb.Append(" ");
  104. }
  105. sb.Append(char1[i]);
  106. }
  107. txt.Text = sb.ToString();
  108. txtBankAccountNumber.Select(txt.Text.Length, 0);
  109. }
  110. }
  111. }