【问题标题】:How to always prepend dollar sign to value in text box如何始终将美元符号添加到文本框中的值
【发布时间】:2014-12-27 13:56:26
【问题描述】:

我希望始终在用户添加任何数字时在文本框中添加 $ 符号

我的代码看起来像这样,但它不起作用:

Private Sub capitalTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles capitalTB.TextChanged
    Dim cleanTXT As String
    If capitalTB.Text.StartsWith("$") = False Then
        cleanTXT = "$" & capitalTB.Text
        capitalTB.Text = cleanTXT
    End If
End Sub

当我输入第二个数字时,它变成了这样:

任何帮助都会很棒。

【问题讨论】:

  • 不要手动操作。当您发布货币值时,使用 ToString:someTB.Text = someAmount.ToString("C2") 它将显示当前文化的正确货币符号。除此之外,“它不工作”并没有描述我们可以解决的问题
  • 更新了问题
  • 你可以根据需要使用Currency-Masked-TextBox来使用$符号。
  • 您知道追加意味着将 $ 添加到字符串的末尾,对吧?

标签: vb.net


【解决方案1】:
Private Sub capitalTB_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles capitalTB.TextChanged
    If capitalTB.Text.StartsWith("$") = False Then
        Dim SelStart As Integer

        SelStart = capitalTB.SelectionStart
        capitalTB.Text = "$" & capitalTB.Text
        capitalTB.SelectionStart = SelStart + 1
    End If
End Sub

尝试上面的代码并学习:当您重置文本框的文本时,您缺少的是光标位置,它将光标置于文本框的开头(实际上是在您插入的 $ 之前)。我首先将光标位置存储在变量中,然后将其分配回以 1 递增的文本框,因为现在还有另一个字母 $。

【讨论】:

    【解决方案2】:
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles capitalTB.TextChanged
        Dim cleanTXT As String
        If capitalTB.Text.StartsWith("$") = False Then
            cleanTXT = "$" & Replace(capitalTB.Text, "$", "")
            capitalTB.Text = cleanTXT
        End If
    End Sub
    

    【讨论】:

    • 它适用于一位数字,但是当我输入 123 时,它变成了 $321
    • @David 你不能自己调试这个??!有史以来最简单的问题!如果你想学习编程,这是你自己解决这个问题的第一步。
    • 我是 VB.net 的新手
    • 好的 - 有 Java 背景的请帮自己一个忙,只使用 C#。还有其他代码你没有向我们展示 123 返回 321。这段代码不可能反转字符串。
    • 我有其他用于按键事件的代码检查: If Not Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
    【解决方案3】:

    回答了我自己的问题,用这个解决了

     Private Sub capitalTB_Validating(ByVal sender As Object, _
                                        ByVal e As System.ComponentModel.CancelEventArgs) Handles capitalTB.Validating
            Dim currency As Decimal
    
            'Convert the current value to currency, with or without a currency symbol.
            If Not Decimal.TryParse(Me.capitalTB.Text, _
                                    Globalization.NumberStyles.Currency, _
                                    Nothing, _
                                    currency) Then
                'Don't let the user leave the field if the value is invalid.
                With Me.capitalTB
                    .HideSelection = False
                    .SelectAll()
    
                    MessageBox.Show("Please enter a valid capital amount.", _
                                    "Invalid Capital", _
                                    MessageBoxButtons.OK, _
                                    MessageBoxIcon.Error)
    
                    .HideSelection = True
                End With
    
                e.Cancel = True
            End If
        End Sub
    
        Private Sub capitalTB_Validated(ByVal sender As Object, _
                                       ByVal e As System.EventArgs) Handles capitalTB.Validated
            'Display the value as local currency.
            Me.capitalTB.Text = Decimal.Parse(Me.capitalTB.Text).ToString("c")
        End Sub
    

    感谢@Avijit 货币掩码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2021-07-11
      相关资源
      最近更新 更多