Очистить все текстовые поля в vb. net выдает ошибку - PullRequest
1 голос
/ 22 января 2020

В качестве обходного пути я использую следующее:

Public Sub ClearTextBox(ByVal root As Control)
        For Each ctrl As Control In root.Controls
            ClearTextBox(ctrl)

            If TypeOf ctrl Is TextBox Then CType(ctrl, TextBox).Text = 0
            If TypeOf ctrl Is ComboBox Then CType(ctrl, ComboBox).Text = String.Empty

        Next ctrl
End Sub

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

Согласно ответу Эндрюса, я снова запустил код, и я получил следующее:

+ $exception {"Conversion from string """" to type 'Short' is not valid."} System.InvalidCastException

Выделенный код:

Dim age As Int16 = Txt_CharAge.Text

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

1 Ответ

2 голосов
/ 22 января 2020

Если у вас есть строка, такая как

Dim age As Int16 = Txt_CharAge.Text

, вы говорите компьютеру ввести строку в число. Без Option Strict On можно свободно создавать любые способы вставки строки (которая не является Int16) в Int16. Вы отказались от контроля над тем, что происходит в этой точке.

Лучший способ - рассказать, как преобразовать символы текста в число. (См. Предательство образов для объяснения, что представление некоторой вещи не является той вещью.)

Существует готовый набор методов с именем TryParse для многих из встроенные типы.

Итак, вместо

Dim age As Int16 = Txt_CharAge.Text

вы должны иметь

Dim age As Integer
Integer.TryParse(Txt_CharAge.Text, age)

Методы TryParse на самом деле являются функциями, которые возвращают True, если анализ был успешным, в противном случае они возвращают False (и устанавливают для переменной значение по умолчанию), но в этом случае кажется, что вам не нужно знать, был ли анализ успешным, потому что значение по умолчанию 0 для целого числа будет Достаточно.

Обратите внимание, что на самом деле нет необходимости использовать Int16 вместо Integer, если вы не знаете, почему вам нужно добавить сложность использования Int16 вместо Integer.

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