«Преобразование из строки в тип «Double» недопустимо».

Только начал заниматься Visual Basic и пытаюсь сделать преобразователь времени. Я знаю, что мой код может быть очень неэффективным или непрактичным, но я пытаюсь сделать часть программы, где вы вводите количество минут в текстовое поле, а не используете полосу прокрутки. Однако, когда текстовое поле пусто, программа аварийно завершает работу и выдает сообщение «Преобразование из строки в тип «Двойное значение недопустимо». ошибка. Код ниже. Строка, в которой отображается ошибка, выделена красным цветом.

Public Class timeConverter

    Private Sub scrollBar_Scroll(sender As Object, e As ScrollEventArgs) Handles scrollBar.Scroll

        Dim minuteBoxInt As Integer 'Declaring variables'
        Dim hourBoxInt As Integer
        Dim minuteBox2Int As Integer = scrollBar.Value Mod 60

        minuteBox.Text = scrollBar.Value() 'The scrollbar value will change with the minute box text'
        minuteBoxInt = minuteBox.Text() 'Make the minuteBox associated with the minuteBoxInt variable'
        hourBoxInt = Math.Floor(minuteBoxInt / 60) 'Rounds the decimal when the minuteBoxInt reaches 60'
        hourBox.Text = hourBoxInt 'Makes the hourBox associated with the hourBoxInt variable'
        minuteBox2.Text() = minuteBox2Int 'Makes the minuteBox2 associated with the minuteBox2Int variable'
    End Sub

    Private Sub minuteBox_TextChanged(sender As Object, e As EventArgs) Handles minuteBox.TextChanged

        hourBox.Text = minuteBox.Text() / 60

    End Sub
End Class```

person throwaway212121    schedule 29.08.2020    source источник
comment
Вы должны вызвать .ToString(), чтобы преобразовать значение.   -  person Daniel A. White    schedule 29.08.2020


Ответы (1)


Чтобы проверить ввод пользователя (или отсутствие ввода), используйте .TryParse. Передайте ему строку и переменную того типа, который вы ищете. Свойство .Text для TextBox представляет собой строку, и здесь мы объявляем переменную minutes, которая будет заполнена проанализированным значением строки, если синтаксический анализ будет успешным. .TryParse возвращает Boolean, поэтому его можно использовать в операторе If.

Private Sub minuteBox_TextChanged(sender As Object, e As EventArgs) Handles minuteBox.TextChanged
    Dim minutes As Integer
    If Integer.TryParse(minuteBox.Text, minutes) Then
        hourBox.Text = (minutes / 60).ToString
    Else
        MessageBox.Show("Please make a valid entry in the minutes box.")
    End If
End Sub
person Mary    schedule 29.08.2020