OK ...まず、If
はまったく必要ありません。 (追加の識別プロパティ:任意のx
の場合はx + 0 = x
)。あなたがそれらに到達する前に起こることになるエラーは、ABox
が0に、BBox
の場合値が "5.000000"のようなものであれば、それらのゼロはすべて結果にコピーされます。同様にボックスが逆である場合。
また、Decimal.Parse
の代わりにDecimal.TryParse
を使用すると、入力ボックスに数字のないものはプログラムを強制終了しません。彼らはただあなたが本当に、本当に、本当に必要があるいくつかの愚かな理由のためならばあなたは
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
のようないくつかのコードと同様の結果(マイナスの余分なゼロ)を取得したい0
になってますよすべての場合は、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
しかし、それは無駄です。さらに悪いことに、2つの数字を追加するのがポイントであれば間違っています。誰かが最初の箱に「I Like Cheese」と「YAAAAAAAAY !!!」を入れることができました。もう一方は「YAAAAAAAAAY !!!」となります。明らかに何が起こるべきでないか。
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
も成功したかどうかを示すブール値(真偽)を返します。失敗した場合は、ユーザーに馬鹿をやめるように指示するメッセージを表示することができます。 (あなたがしたい場合はもう少し外交、。)
第二に... Option Strict
をオンにします。お願いします。この暗黙のキャスティングは私にすべての義をもたらします。それはおそらくあなたのリストにダースのようなエラーを追加することに注意してください...それは良いものです。文字列変数に数値を入れようとしているときには注意が必要です。そのため、多くの魔法が発生します(私の意見では)人々はもっと意識する必要があります。
K、今、デバッグのために...私のアドバイスにこの点まで従っていれば、本当にデバッグする必要はありません。例外はなくなり、コンパイルする前にコードがより正確になるようになります。しかし、それでも必要ならば、プログラムをステップバイステップで進める1つの方法は、Function
行またはブレークポイントを宣言ではない最初の行に設定することです。 (行の隣にある左の余白をクリックすると、クリックした場所の赤い部分に余白が表示されるので、そこにブレークポイントがあることがわかります)。おそらく宣言にブレークポイントを設定しようとすることもできますが、ブレークポイントが実際に何かをする次の行にあるか、関数の先頭にあることに注意してください。私は忘れて、このマシンでVSをチェックしないでください)
VSからプログラムを実行すると、プログラムが起動し、ブレークポイントに達すると、VSはフォアグラウンドに黄色い矢印は赤いボールがあるところです。その黄色の矢印は実行される次の行を指します。そこから、デバッグツールバーを使用することができます(ツールバー内を見て、青いと思う、再生/停止/等のボタンのような余分なボタンを持っている必要があります)コードをステップ実行します。また、 'Locals'、 'Watches'などのウィンドウと、価値のあるデバッガに表示されると思われるその他のウィンドウも表示されます。 :)
プログラムがブレークポイントで停止している間、またはコードをステップ実行している間、アプリケーションはフリーズしたように見えます。 UIアップデートはすぐには表示されないため、入力ボックスに何も入力したり、再開するまでボタンを押したりすることはできません(「再生」ボタンを押す)。
A = 0の場合はA + B = B、B = 0の場合はA + B = A、両方が0の場合はA + B =言い換えれば0、あなただけのA + Bを計算し、条件付きのものをいまいましいことができます。 – cHao
は、このより良いですか? (A = 0)すると ResultLabel.Text = B 終了する場合(B = 0の場合 の場合)Then ResultLabel.Text = A 終了の場合 、どのように私は正確に何を見つけるために、ステップバイステップのデバッグを見つけるに行くか(BBox.Text = 0とABox.Text = 0)すると ResultLabel.Text = 0 終了 – user1234703
ifとも場合プログラムはすべてのステップを出力していますか?事前に助けてくれてありがとう! – user1234703