创建只接受数字的WPF文本框

这个问题在这里已经有了答案:

  • 如何让TextBox只接受WPF中的数字输入? 27个答案

  • 到目前为止,我所见过的大多数实现都是使用PreviewTextInput事件来实现正确的掩码行为。 这个从TextBox继承,这个使用附加的属性。 两者都使用.Net的MaskedTextProvider提供正确的遮罩行为,但如果您只想要一个简单的“仅限数字”文本框,则不需要此类。


    private void txt_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox textBox = sender as TextBox;
        int iValue = -1;
    
        if (Int32.TryParse(textBox.Text, out iValue) == false)
        {
             TextChange textChange = e.Changes.ElementAt<TextChange>(0);
             int iAddedLength = textChange.AddedLength;
             int iOffset = textChange.Offset;
    
             textBox.Text = textBox.Text.Remove(iOffset, iAddedLength);
        }
    }
    

    在我看来,满足这一要求的最好方法是仅使用OnTextChanged事件,因为它可以处理按键的数字,并且也能够处理从剪贴板复制+粘贴。 我希望我的VB代码如下所示可以让我们对此有所了解。

    Private Sub NumericBox_TextChanged(sender As Object, e As TextChangedEventArgs) Handles Me.TextChanged
      Dim Buffer As New StringBuilder
      Dim Index As Integer = Me.SelectionStart
      For Each C In Me.Text
        If Char.IsDigit(C) Then
          Buffer.Append(C)
        ElseIf Me.SelectionStart > Buffer.Length Then
          Index -= 1
        End If
      Next
      Me.Text = Buffer.ToString
      Me.SelectionStart = Index
    End Sub
    
    链接地址: http://www.djcxy.com/p/95961.html

    上一篇: Create WPF TextBox that accepts only numbers

    下一篇: How to make Textbox only accept alphabetic characters