最近再用textbox做限制輸入時遇到一個莫名其妙的問題:
首先看代碼:
<TextBox Name="txtip1" Height="40" Width="60" FontSize="20" MaxLength="3" TextChanged="TextBox_TextChanged">
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
//屏蔽中文輸入和粘貼輸入
System.Windows.Controls.TextBox textBox = sender as System.Windows.Controls.TextBox;
if (textBox == null) return;
TextChange[] change = new TextChange[e.Changes.Count];
e.Changes.CopyTo(change, 0);
int offset = change[0].Offset;
if (change[0].AddedLength > 0)
{
double num = 0;
if (!Double.TryParse(textBox.Text, out num))
{
textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
textBox.Select(offset, 0);
}
}
if (ComConvert.TryInt(textBox.Text) > 255)
{
textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1);
textBox.SelectionStart = textBox.Text.Length;
}
}
catch (Exception ex)
{
WinMessage.Show("輸入數字有問題,請重新輸入!");
}
}
感覺代碼沒有一點問題,可代碼運行時,發現所做的限制不起作用,如果把textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1); 這一句注釋掉,雖然MaxLength屬性又生效了,但是又不能限制數字不大於255,而且中文輸入法還是可以輸入。原本以為在TextChanged事件中再判斷一下長度就好了,測試卻發現只能生效一次,后面就又不起作用了。又嘗試了KeyDown事件,發現還是一樣。怎么辦呢?
解決方法很簡單:只要在TextBox中將InputMethod.IsInputMethodEnabled屬性設為false即可,該屬性還可以屏蔽中文輸入法