ОК ... во-первых, вам вообще не нужны If
с. (Identity Property of Addition: для любых x
, x + 0 = x
.) Любая ошибка, которая должна произойти, произойдет еще до того, как вы к ней попадете, поэтому единственное, что вы сделали, это скажите, что если ABox
анализирует к нулю, а значение BBox
будет примерно равно 5.000000, все эти нули будут скопированы в результат. Аналогично, если коробки поменялись местами.
Кроме того, если вы используете Decimal.TryParse
вместо Decimal.Parse
, то, что не в числовом формате, в полях ввода не убьет вашу программу. Они просто превратятся в 0.
Вы получите аналогичные результаты (за исключением дополнительных нулей) с некоторым кодом, подобным
Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click
Dim A as Decimal, B as Decimal
Decimal.TryParse(ABox.Text, A)
Decimal.TryParse(BBox.Text, B)
ResultBox.Text = (A + B).ToString("N2")
End Sub
Если по какой-то глупой причине вам действительно, действительно, действительно нужно все это Если дерьмо, вы захотите использовать ElseIf
, чтобы гарантировать, что случай по умолчанию не запускается .
Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click
Dim A as Decimal
Dim B as Decimal
Decimal.TryParse(ABox.Text, A)
Decimal.TryParse(BBox.Text, B)
If A = 0 then
ResultBox.Text = BBox.Text
ElseIf B = 0 then
ResultBox.Text = ABox.Text
Else
Dim result as Decimal = A + B
ResultBox.Text = result.ToString("N2")
End If
End Sub
Но это пустая трата - и что еще хуже, если смысл добавить два числа, это неправильно. Кто-то может поставить «Я люблю сыр» в первую коробку и «ЯАААААААЙ !!!» в другом, и результатом будет «ЯАААААААЙ !!!». Ясно, что не должно происходить.
Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles AddButton.Click
Dim A as Decimal
Dim B as Decimal
Try
A = Decimal.Parse(ABox.Text)
B = Decimal.Parse(BBox.Text)
ResultBox.Text = (A + B).ToString("N2")
Catch ex as FormatException
MessageBox.Show("Exactly two numbers (one per box), please!")
End Try
End Sub
Но я ненавижу делать это для пользовательского ввода. Вы должны ожидать, что пользователей будут злыми и / или идиотскими, и рассчитывать на то, что они сделают все возможное, чтобы испортить ваше приложение. Это сэкономит вам много отладки позже. Но если мы предположим худшее, действительно ли искаженный ввод действительно является исключительным условием? Я говорю нет. (Другие могут не согласиться. Но они не правы. :))
Если вы хотите уведомить пользователя об ошибке ввода, Decimal.TryParse
также возвращает логическое значение (true / false), сообщающее, успешно ли оно выполнено. Если это не удалось, вы можете показать сообщение, говорящее пользователю выйти из идиота. (Чуть более дипломатично, если хотите.)
Во-вторых ... включите Option Strict
. Пожалуйста. Все это неявное кастинг дает мне воли. Обратите внимание, что это, вероятно, добавит около десятка ошибок в ваш список ... но это хорошо вещь. Нужно знать, когда они пытаются поместить число в строковую переменную и т. Д., Потому что там происходит много магии, о которой (по моему мнению) люди должны знать больше.
К, теперь, что касается отладки ... если вы следовали моему совету до этого момента, вам не нужно было бы отлаживать. Исключения исчезли, и код станет более правильным, прежде чем вы сможете его скомпилировать. Но если вам все еще нужно, один из способов пошагового выполнения программы - установить точку останова либо на самой строке Function
, либо на первой строке, которая не является объявлением. (Щелкните левое поле рядом с линией. На том месте, где вы щелкнули, должен появиться красный шарик. Это даст вам понять, что там есть точка останова.) Возможно, вы также можете попытаться установить точку прерывания в объявлениях, но я помните, что точка останова должна быть либо на следующей строке, которая на самом деле что-то делает, либо в начале функции. Я забыл, что, и на этой машине нет VS для проверки.)
Когда вы запускаете программу из VS, она запускается, и когда она достигает точки останова, VS возвращается на передний план с желтой стрелкой, где находится красный шар. Эта желтая стрелка указывает на следующую строку, которая будет выполнена. Оттуда вы можете использовать панель инструментов отладки (посмотрите на панели инструментов; у вас должны быть дополнительные кнопки, я думаю, синие, которые выглядят как кнопки play / stop / etc), чтобы пройти по коду. Вы также должны увидеть окна с надписями «Местные», «Часы» и другие окна, которые вы ожидаете увидеть в стоящем отладчике. :)
Просто имейте в виду, что пока программа останавливается на точке останова или выполняет пошаговый код, приложение будет зависать. Обновления пользовательского интерфейса, вероятно, не появятся сразу, и, следовательно, вы не сможете ничего вводить в поля ввода или нажимать кнопку, пока не возобновите (нажмите кнопку воспроизведения).