2

私は何年もビジュアルベーシックでプログラミングしていませんが、温度を華氏から摂氏に変換すると思われるこのコードがあります。問題は、テキスト ボックスの 1 つに数値を入力すると、数値が繰り返され、値が正しくないことです。ハンドルと関係があると思いますが、ここでかなり迷っています。何かアイデアはありますか?

Public Class MainForm

    Private Sub FahrenheitTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FahrenheitTextBox.TextChanged
        CelciusTextBox.Text = 5 / 9 * (Val(FahrenheitTextBox.Text) - 32)
    End Sub

    Private Sub CelciusTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CelciusTextBox.TextChanged
        FahrenheitTextBox.Text = (9 / 5 * (Val(CelciusTextBox.Text)) + 32)
    End Sub
End Class
4

1 に答える 1

1

これ自体は答えではありませんが、コメントにうまく表示されない提案をいくつかしたかったのです。TextChanged イベントを使用している場合は、不要なイベントを防ぐ必要があります。たとえば、1 つのテキスト ボックスに入力すると TextChanged が発生し、別のテキスト ボックスが変更され、TextChanged が発生して、入力しているテキスト ボックスが変更されるなどです。 .

次のようなことを試してください:

Public Class MainForm

    Private textChanging As Boolean = False

    Private Sub FahrenheitTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FahrenheitTextBox.TextChanged
        If Not textChanging Then
            textChanging = True
            CelciusTextBox.Text = 5 / 9 * (Val(FahrenheitTextBox.Text) - 32)
            textChanging = False
        End If
    End Sub

    Private Sub CelciusTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CelciusTextBox.TextChanged
        If Not textChanging Then
            textChanging = True
            FahrenheitTextBox.Text = (9 / 5 * (Val(CelciusTextBox.Text)) + 32)
            textChanging = False
        End If
    End Sub

End Class

また、CStr文字列から数値への変換に使用するのと同じ方法で、数値からVal文字列への変換にも使用する必要があります。

Private Sub FahrenheitTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FahrenheitTextBox.TextChanged
    If Not textChanging Then
        textChanging = True
        CelciusTextBox.Text = CStr(5 / 9 * (Val(FahrenheitTextBox.Text) - 32))
        textChanging = False
    End If
End Sub

最後に、あなたの質問にタグを付け直しました - これは VB6 ではなく VB.NET です。ありがとう!

于 2013-01-17T05:04:25.267 に答える