.net 如何在键入时将文本框中的值格式化为货币(例如123456.50)?

.net 如何在键入时将文本框中的值格式化为货币(例如123456.50)?,.net,vb.net,winforms,textbox,.net,Vb.net,Winforms,Textbox,我想在键入时格式化文本框的内容。 我知道我可以在LostFocus事件中执行此操作,但我希望在键入时执行此操作。有人对如何实现这一点有什么建议吗?< P>而不是尝试自己来处理这个问题,考虑使用一个专门设计来处理格式化输入的控件。strong>具体来说,您需要控件,它是现有文本框的增强版,允许您设置用于区分有效和无效输入的“掩码”。用户甚至可以在键入时获得视觉反馈 您需要设置以告诉控件您希望如何格式化其内容。所有可能的值都显示在链接文档中。要显示货币,您可以使用以下内容:$999999.00,它表

我想在键入时格式化文本框的内容。
我知道我可以在
LostFocus
事件中执行此操作,但我希望在键入时执行此操作。有人对如何实现这一点有什么建议吗?

< P>而不是尝试自己来处理这个问题,考虑使用一个专门设计来处理格式化输入的控件。strong>具体来说,您需要控件,它是现有文本框的增强版,允许您设置用于区分有效和无效输入的“掩码”。用户甚至可以在键入时获得视觉反馈


您需要设置以告诉控件您希望如何格式化其内容。所有可能的值都显示在链接文档中。要显示货币,您可以使用以下内容:
$999999.00
,它表示0到999999之间的货币值。巧妙之处在于,货币、千分之一和十进制字符在运行时会自动替换为其特定于区域性的等效字符,从而更容易编写国际软件。

Dim strucrency As String=“” Dim acceptableKey为布尔值=False

私有子textbox1u KeyDown(ByVal sender作为对象,ByVal e作为System.Windows.Forms.KeyEventArgs)处理TextBox1.KeyDown
如果(e.KeyCode>=Keys.D0和e.KeyCode=Keys.NumPad0和e.KeyCode如果我使用MaskedTextBox,wat如果用户输入1000.00,我的MaskedTextBox设置为1000000.00。)@jamie:这是完全允许的,只要您正确设置
Mask
属性。您不会将其设置为
1000000.00
,因为
0
指定了0和9之间所需的数字。相反,您可以使用
9
(如我的示例中所示),这意味着数字或空格是可选的。这样,用户总是可以输入一个小于最大位置值的数字。我按照您的建议,将maskedtextbox属性设置为9999999.00。但是如果我在masked textbox中键入1000,我会得到一个类似于100,0的结果。我希望结果看起来像1000.00,怎么可能我会这样做吗?格雷代码,你能给我一些这个问题的示例代码吗..谢谢you@jamie:是的,默认情况下蒙面文本框的外观就是这样。如果您希望数字“按入”从右边看,就像袖珍计算器一样,您可以对控件进行子类化并修改其行为。这里提供了一个示例。如果您想修改默认行为,您必须编写一些代码。
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    ' Check for the flag being set in the KeyDown event.
    If acceptableKey = False Then
        ' Stop the character from being entered into the control since it is non-numerical.
        e.Handled = True
        Return
    Else
        If e.KeyChar = Convert.ToChar(Keys.Back) Then
            If strCurrency.Length > 0 Then
                strCurrency = strCurrency.Substring(0, strCurrency.Length - 1)
            End If
        Else
            strCurrency = strCurrency & e.KeyChar
        End If

        If strCurrency.Length = 0 Then
            TextBox1.Text = ""
        ElseIf strCurrency.Length = 1 Then
            TextBox1.Text = "0.0" & strCurrency
        ElseIf strCurrency.Length = 2 Then
            TextBox1.Text = "0." & strCurrency
        ElseIf strCurrency.Length > 2 Then
            TextBox1.Text = strCurrency.Substring(0, strCurrency.Length - 2) & "." & strCurrency.Substring(strCurrency.Length - 2)
        End If
        TextBox1.Select(TextBox1.Text.Length, 0)

    End If
Private Sub TBItemValor_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TBItemValor.KeyPress
        If (Char.IsDigit(e.KeyChar) = False AndAlso Char.IsControl(e.KeyChar) = False AndAlso Char.IsPunctuation(e.KeyChar) = False) OrElse Not IsNumeric(Me.TBItemValor.Text & e.KeyChar) Then
            e.Handled = True
        End If
    End Sub