Я получил это сообщение: Преобразование из строки в тип Double недопустимо , и я не могу понять, что делать. Вот код

    Dim Amount As String = TextBoxAmount.Text

    If Amount = "" Or Not IsNumeric(Amount) Then
        MsgBox("Incorect Format!", InfoOKOnly, AppTitle)
        TextBoxAmount.Focus()
        Return '- Exit Sub
    End If

    Dim DblAmount As Double = CType(Amount, Double)
    If (DblAmount < 500) Then
        MsgBox("Amount must be greater than or equal to 500", InfoOKOnly, AppTitle)
        TextBoxAmount.Focus()
        Return
    End If

    TextBoxAmount.Text = Format(DblAmount, "#,##0.  00")
End Sub

Private Sub ButtonSave_Click(sender As Object, e As EventArgs) Handles ButtonSave.Click
    If (MsgBox("Do you want to continue?", vbQuestion + vbYesNo, AppTitle) = MsgBoxResult.Yes) Then
        If TextBoxAccountNo.Text = "" Or String.IsNullOrEmpty(TextBoxAccountNo.Text) Or
           TextBoxAccountName.Text = "" Or String.IsNullOrEmpty(TextBoxAccountName.Text) Or
           TextBoxPhoneNo.Text = "" Or String.IsNullOrEmpty(TextBoxPhoneNo.Text) Or
           TextBoxAmount.Text = "" Or String.IsNullOrEmpty(TextBoxAmount.Text) Then
            '--^_^
            Return
        End If

        Dim cf As MyClassFiles1 = New MyClassFiles1()

        Dim accNo As String = TextBoxAccountNo.Text
        Dim accName As String = TextBoxAccountName.Text
        Dim PhoneNo As String = TextBoxPhoneNo.Text
        Dim Cash As Double = CDbl(TextBoxAmount.Text)

И проблема здесь, в этой строке кода (сначала выше). Когда я вписываю числа в текстовое поле (сумма), он говорит, что не может быть преобразован в удвоение.

        Dim o As MyAccountClass1 = New MyAccountClass1(accNo, accName, PhoneNo, Cash)

        FileOpen(1, cf.GetMasterFile, OpenMode.Append)

        '-- C stand for Create New Account
        WriteLine(1, o.AccountNo, o.AccountName, o.PhoneNo, o.Amount, "Active")

        FileOpen(2, cf.GetTransactionFile, OpenMode.Append)

        WriteLine(2, o.AccountNo, CreatedDate, CreatedTime, "C", o.Amount)

        '--Close before reopening in another mode.

        FileClose(1)
        FileClose(2)

        MsgBox("The files have been saved!", InfoOKOnly, AppTitle)

        ClearTextBoxes()
    End If
End Sub
End Class
0
Tamara 26 Дек 2019 в 13:38

2 ответа

Лучший ответ

Я бы предложил использовать TryParse

    ...
    Dim Cash As Double
    If Not Double.TryParse(TextBoxAmount.Text, Cash) Then
        'do sth, show some msgbox that value in the textBox is incorrect
    End If
    ...

Кроме того, ваши чеки String.IsNullOrEmpty должны быть заменены на String.IsNullOrWhiteSpace, потому что вы проверяете пустое место перед ним TextBoxAccountNo.Text = ""

И еще одна вещь о коде. Вы хотите использовать OrElse вместо Or Проверьте этот вопрос, особенно этот ответ.

0
hiichaki 26 Дек 2019 в 10:58

Я думаю, что ваша проблема с этой линией.

TextBoxAmount.Text = Format(DblAmount, "#,##0.  00")

Пробелы между 0 и 00 не будут приняты Double.

Вы можете объединить свою проверку в кнопку Сохранить. Не оскорбляйте пользователей, спрашивая, хотят ли они продолжить.

Используйте методы System.IO, доступные из .net. File.AppendAllText открывает, записывает и закрывает файл, сохраняя несколько строк кода.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim InputCash As Double

    If Not Double.TryParse(TextBoxAmount.Text, InputCash) OrElse InputCash < 500 Then
        MessageBox.Show("Please enter a valid amount greater than or equal to 500.")
        TextBoxAmount.Focus()
        Return '- Exit Sub
    End If


    If String.IsNullOrWhiteSpace(TextBoxAccountNo.Text) OrElse
       String.IsNullOrWhiteSpace(TextBoxAccountName.Text) OrElse
       String.IsNullOrEmpty(TextBoxPhoneNo.Text) Then
        MessageBox.Show("Please fill in all boxes.")
        Return
    End If

    Dim cf As MyClassFiles1 = New MyClassFiles1(TextBoxAccountNo.Text, TextBoxAccountName.Text, TextBoxPhoneNo.Text,InputCash)
    Dim message = cf.SaveFiles()
    MessageBox.Show(message)
End Sub

Public Class MyClassFiles1
    Public Property AccountNo As String
    Public Property AccountName As String
    Public Property PhoneNo As String
    Public Property Amount As Double

    Public Sub New(number As String, name As String, pnone As String, cash As Double)
        AccountNo = number
        AccountName = name
        PhoneNo = pnone
        Amount = cash
    End Sub

    Private Function GetMasterFile() As String
        Return "C:\SomeUser\MasterAccountFile.txt"
    End Function

    Private Function GetTransactionFile() As String
        Return "C:\SomeUser\TransactionFile.txt"
    End Function

    Public Function SaveFiles() As String
        Try
            Dim strForMaster = $"{AccountNo},{AccountName},{PhoneNo},{Amount},Active"
            File.AppendAllText(GetMasterFile(), strForMaster)
            Dim strForTransaction = $"{AccountNo},{Now.Date},{Now.ToShortTimeString},C,{Amount}"
            File.AppendAllText(GetTransactionFile(), strForTransaction)
        Catch ex As Exception
            Return ex.Message
        End Try
        Return "The files have been saved!"
    End Function
End Class
0
Mary 26 Дек 2019 в 14:20