BC42322 VB.NET 将 'String' 转换为 'IFormatProvider' 时可能会出现运行时错误
BC42322 VB.NET Runtime errors might occur when converting 'String' to 'IFormatProvider'
我正在尝试将旧的 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
在处理该文本框中字符的函数的开头
Text
属性已经是一个字符串,ToString()
字符串的方法没有你想要的重载。
因为这个文本字段似乎可以同时包含一个值的格式化和未格式化版本,您可能想要做的是首先剥离任何格式,转换为数字类型,如 Integer
或 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
您可以这样调用这些函数:
txtDividend.Text = FormatDividend(txtDividend.Text)
当然,您可以根据需要调整该表达式,或者更改重载和转换以使用 Integer 而不是 Decimal。
因为我有多个 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#")
由于您正尝试从 "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
我正在尝试将旧的 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
在处理该文本框中字符的函数的开头
Text
属性已经是一个字符串,ToString()
字符串的方法没有你想要的重载。
因为这个文本字段似乎可以同时包含一个值的格式化和未格式化版本,您可能想要做的是首先剥离任何格式,转换为数字类型,如 Integer
或 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
您可以这样调用这些函数:
txtDividend.Text = FormatDividend(txtDividend.Text)
当然,您可以根据需要调整该表达式,或者更改重载和转换以使用 Integer 而不是 Decimal。
因为我有多个 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#")
由于您正尝试从 "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