将'String'转换为'IFormatProvider'

时间:2018-05-29 16:48:42

标签: vb.net vb6

我正在尝试将旧的VB6(Visual Basic 6.0)项目迁移到VB.net框架4.6x。 但我不得不首先转向.net framework 2.0。

我曾经使用ToString将TextBox中的数字转换为带格式的数字,如下所示。 在Visual Studio 2017 .net framework 2.0中,我有BC42322警告。 有办法解决这个问题吗?

txtDividend.Text = txtDividend.Text.ToString("###,###,##0")

我也有

On Error GoTo Error_Handle

在函数的开头处理该文本框中的字符

3 个答案:

答案 0 :(得分:1)

Text属性已经是一个字符串,字符串的ToString()方法没有你想要的重载。

由于看起来同一文本字段可以同时保存值的格式化和未格式化版本,您可能要做的是首先去掉任何格式,转换为数字类型,如Integer或{{1然后使用Decimal方法:

ToString()

你可以这样调用这些函数:

Public Function FormatDividend(dividend As String) As String
    Dim extraCharacters As New Regex("[^\d,.-]")
    dividend = extraCharacters.Replace(dividend, "")
    Return FormatDividend(CDec(dividend))
End Function
Public Function FormatDividend(dividend As Decimal) As String
    Return Dividend.ToString("###,###,##0")
End Function

当然,您可以根据需要调整该表达式,或者更改重载并转换为使用Integer而不是Decimal。

答案 1 :(得分:1)

由于您尝试从" 1000" .ToString(" ###,## 0")生成1,000的环境迁移,您将希望在您的新的(.net)。该解决方案是创建一个基本上提供过载的扩展方法。

<Extension>
Function ToString(input as String, format as String) as String
    Static numericOnly As Regex = New Regex("[^\d.-]")
    Dim asDec as Decimal
    Decimal.TryParse(numericOnly.Replace(input, ""), asDec)
    Return asDec.ToString(format)
End Function

答案 2 :(得分:0)

由于我有多个TextBox要使用格式,我升级了Joel Coehoorn的答案,在我的项目中使用格式TextBox。

首先,我创建了CommonFunction.vb模块文件

Imports System.Text.RegularExpressions
Module CommonFunction
    Public Function FormatNumberInText(text As String, format As String) As String
        Dim extraCharacters As New Regex("[^\d,.-]")
        text = extraCharacters.Replace(text, "")
        Return FormatNumberInText(CDec(text), format)
    End Function
    Public Function FormatNumberInText(text As Decimal, format As String) As String
        Return text.ToString(format)
    End Function
End Module

在我的TextBox vb文件中,我使用它如下。

txtDividend.Text = FormatNumberInText(txtDividend.Text, "###,###,##0")
txtDividendRatio.Text = FormatNumberInText(txtDividendRatio.Text, "###,###,##0.0#")

谢谢Joel Coehoorn