我正在尝试将旧的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
在函数的开头处理该文本框中的字符
答案 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#")