2013-05-29 44 views
0

我應該訂閱哪些事件才能在事件參數中獲得TextBoxText通過事件參數接收控件文本的事件

我試過PreviewTextInput,但是如果輸入字符串是例如「122」。該框(見代碼)文本是沒有點,但eventArgs.Text是「。」並且輸入字符串驗證成功,TextBox.Text爲「122 ..」。我想要做的是通過調用decimal.TryParse來驗證輸入的字符串是否爲十進制。

private void OnPreviewTextInput(object sender, TextCompositionEventArgs eventArgs) 
{ 
    var box = sender as TextBox; 
    if (box == null) return; 

    eventArgs.Handled = !ValidationUtils.IsValid(box.Text + eventArgs.Text); 
} 

回答

1

您可以嘗試這樣的事:

private void OnPreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    var textBox = (TextBox)sender; 
    var text = textBox.Text.Insert(textBox.CaretIndex, e.Text); 
    decimal number; 
    if (!decimal.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out number)) 
    { 
     e.Handled = true; 
    } 
} 
+0

只需要確保你要麼禁止複製粘貼或處理明確糊事件將繞過該驗證 – Viv

+0

你試過這個代碼?我在這一行得到ArgumentOutOfRangeException var text = textBox.Text.Insert(textBox.CaretIndex,e.Text);' – Sega

+0

@sega當然。這對我來說可以。當然,處理程序被附加到'PreviewTextInput'事件。 – Clemens