BC42322 VB.NET Runtime ошибки могут возникнуть при преобразовании 'String' в 'IFormatProvider' - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь перенести старый проект VB6 (Visual Basic 6.0) на платформу VB.net 4.6x.Но мне сначала пришлось перейти на .net framework 2.0.

Я использовал для преобразования чисел в TextBox в форматированные числа, используя ToString, как показано ниже.В Visual Studio 2017 .NET Framework 2.0 у меня есть предупреждение BC42322.Есть ли способ решить эту проблему?

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

У меня также есть

On Error GoTo Error_Handle

в начале функции для обработки символов в этом текстовом поле

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Поскольку у меня есть несколько TextBox для использования формата, я обновил ответ Джоэла Кехорна , чтобы использовать формат 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

, и в моем VB-файле TextBox я использовал его, как показано ниже.

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

Спасибо Джоэл Кохорн .

0 голосов
/ 02 июня 2018

Поскольку вы пытаетесь мигрировать из среды, в которой «1000» .ToString («###, ## 0») произвело 1000, вы захотите, чтобы это работало в вашем новом (.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
0 голосов
/ 29 мая 2018

Свойство 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...