解决控件中中英文混合输入长度限制问题.

      源于"博问"上的一篇帖子,很多时候我们的控件需要限定字符输入的MaxLength,但是遇到中英文混合的情况,对于长度的判定就有点复杂,现提供TextBoxBase继承控件的通用方法:

 

Code
 public static void OnTextBoxValueChanged(object sender, EventArgs e)
        {
            TextBoxBase txtbox 
= sender as TextBoxBase;
            
if (txtbox != null)
            {
                txtbox.TextChanged 
-= OnTextBoxValueChanged;

                
if (Encoding.Default.GetByteCount(txtbox.Text) >
                    txtbox.MaxLength 
&& txtbox.Text.Length > 0)
                {
                    
string tmp = txtbox.Text.Substring(0,txtbox.Text.Length - 1);

                    
while (Encoding.Default.GetByteCount(tmp) >txtbox.MaxLength && tmp.Length > 0)
                    {
                        tmp 
=tmp.Substring(0, tmp.Length - 1);
                    }

                    
int start = txtbox.SelectionStart;
                    
int length = txtbox.SelectionLength;
                    txtbox.Text 
= tmp;
                    txtbox.SelectionStart 
= start;
                    txtbox.SelectionLength 
= length;
                }

                txtbox.TextChanged 
+= OnTextBoxValueChanged;
            }
        }

 
转载请注明原文地址:http://www.cnblogs.com/winzheng/archive/2009/03/04/1402721.html

  • 控件最大字符长度即为数据库字段长度即可.
  • 在需要验证长度的控件的ValueChanged 事件上响应此方法即可.
posted @ 2009-03-04 09:35  winzheng  阅读(1328)  评论(10编辑  收藏  举报