我正在设计的这个应用程序有一个名为txtValue的文本框,其属性MaxLength设置为14,TextAlign设置为Right。我希望txtValue仅接受货币,并动态格式化输入内容,以便用户无需添加逗号,只需添加一个句点即可。
我设法做到了,使得txtValue在事件txtValue_KeyPress中仅接受数字和一个点。
txtValue_LostFocus会将输入转换为货币格式。
到目前为止,这是我的代码:
Private Sub txtValue_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtValue.KeyPress
'Allows only one dot
If (e.KeyChar.ToString = ".") And (txtValue.Text.Contains(e.KeyChar.ToString)) Then
e.Handled = True
Exit Sub
End If
'Allows only 0 to 9 and dot (once)
If (e.KeyChar.ToString < "0" OrElse e.KeyChar.ToString > "9") _
AndAlso e.KeyChar <> ControlChars.Back _
AndAlso e.KeyChar.ToString <> "." Then
e.Handled = True
End If
End Sub
Private Sub txtValue_LostFocus(sender As Object, e As EventArgs) Handles txtValue.LostFocus
txtValue.Text = Format(Val(txtValue.Text), "000,000,000.00")
End Sub
我希望输入-q1w23456789012 .... 34返回输出123,456,789,012.34,但是失去焦点后的实际输出为123,456,789,012.30
这似乎很容易解决,例如将MaxLength设置为15,但是如果我不输入句点,它将允许我输入15个数字,并且在句点之后最多只希望输入12加2。 / p>
我希望输入-q1w234 .... 5678返回输出1,234.56,但是失去焦点后的实际输出为000,000,001,234.56
这似乎是一个更复杂的修复程序,因为我不想使用LostFocus事件来验证输入的内容。我希望KeyPress事件处理输入并动态格式化我键入的内容。
在这种情况下:
输入1的输出为1.00
输入123.4将具有输出123.40
输入1234.567将具有输出1,234.56
所有这些都不需要LostFocus事件,但是现在我正在使用LostFocus事件,因为这是我非常有限的知识所允许的。
更新
好吧,我现在正在使用Leave事件,但是再一次,我只使用LostFocus作为占位符,因为最后我希望TextBox调整用户键入内容的方式。
答案 0 :(得分:0)
另一种处理方式。有关格式化显示数字的详细信息,请尝试使用MS docs https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings或https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings
Private err As New ErrorProvider()
Private d As Decimal 'In case you want to use the value as a number somewhere else
Private Sub TextBox17_Validating(sender As Object, e As CancelEventArgs) Handles TextBox17.Validating
If Not Decimal.TryParse(TextBox17.Text, d) Then
e.Cancel = True
err.SetError(TextBox17, "This text box must contain a number.")
Else
err.Clear()
End If
End Sub
Private Sub TextBox17_Validated(sender As Object, e As EventArgs) Handles TextBox17.Validated
TextBox17.Text = d.ToString("C")
End Sub