源于"博问"上的一篇帖子,很多时候我们的控件需要限定字符输入的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;
}
}
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 事件上响应此方法即可.