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

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

 

ContractedBlock.gif ExpandedBlockStart.gif 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 事件上响应此方法即可.

转载于:https://www.cnblogs.com/winzheng/archive/2009/03/04/1402721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值