三角函数计算器Radians to Degrees,反之亦然

时间:2014-01-16 05:48:00

标签: .net

我对编程很陌生,无法在这些论坛上找到答案。

我正在使用VB.NET,我希望将一个可以将Degrees转换为Radians(反之亦然)的程序,同时计算角度。

换句话说,有两个文本框和一个按钮。按钮是“Sin x”。文本框旁边有标签:“Degrees”和“Radians。”

假设您输入度数值并单击,例如“sin x”。从那里,程序获取您输入的值,将其转换为弧度,计算该转换值的sin,并在“Radians”文本框中显示它。你的想法是你也可以在“Radians”文本框中放入一个值,程序将其转换为度数,获取转换后的值,并将其输出到“Degrees文本框”。

我成功地将度数转换为弧度,计算并放在弧度文本框中,但是我已经碰到了一堵砖墙,我对如何将值放在弧度文本框中感到困惑,转换为度,并在学位文本框上显示。

这是我到目前为止的代码:

Public Class TrigonometryConverter

    Private Sub btnSin_Click(sender As Object, e As EventArgs) Handles btnSin.Click
        Dim input, input2 As Double
        Dim output, Soutput, output2, Soutput2 As Double
        Const cfactor As Double = (Math.PI) / 180
        input = Convert.ToDouble(tbxD.Text)
        input2 = Convert.ToDouble(tbxR.Text)
        output = input * cfactor
        output2 = input2 / cfactor
        Soutput = Math.Sin(output)
        Soutput2 = Math.Sin(output2)
        tbxR.Text = Convert.ToString(Soutput)
        tbxD.Text = Convert.ToString(Soutput2)

    End Sub
End Class

tbxD.Text是放入和放出“度数”值的文本框。 tbxR.Text是放入和放出“Radian”值的文本框。

带有上面代码的程序根本不起作用,但是,如果我使用下面的代码,我可以使程序部分工作,其中度数切换到弧度,计算并输出:

Public Class TrigonometryConverter

    Private Sub btnSin_Click(sender As Object, e As EventArgs) Handles btnSin.Click
        Dim input As Double
        Dim output, Soutput As Double
        Const cfactor As Double = (Math.PI) / 180
        input = Convert.ToDouble(tbxD.Text)
        output = input * cfactor
        Soutput = Math.Sin(output)
        tbxR.Text = Convert.ToString(Soutput)

    End Sub
End Class

tl; dr版本:我有一个程序,希望两个文本框都接受值输入并输出CALCULATED值。

有任何建议/解决方案吗?谢谢!

1 个答案:

答案 0 :(得分:2)

这个问题是由糟糕的UI设计引发的,你因此而陷入困境。度和弧度当然是强相关的。如果用户在一个框中输入值,则需要更新另一个框中的值。现在,使用哪个框来计算Sine()并不重要。并且不要将计算结果放回文本框中,而是将其显示在Label中。

使用TextChanged事件检测用户输入:

Private Updating As Boolean

Private Sub txtDegrees_TextChanged(sender As Object, e As EventArgs) Handles txtDegrees.TextChanged
    If Updating Then Return
    Updating = True
    Dim value As Double
    If Double.TryParse(txtDegrees.Text, value) Then
        txtRadians.Text = (value / 180 * Math.PI).ToString()
    Else
        txtRadians.Text = ""
    End If
    Updating = False
End Sub

用于TextBox的用户可以用弧度输入值的方法大致相同:

Private Sub txtRadians_TextChanged(sender As Object, e As EventArgs) Handles txtRadians.TextChanged
    If Updating Then Return
    Updating = True
    Dim value As Double
    If Double.TryParse(txtRadians.Text, value) Then
        txtDegrees.Text = (value * 180 / Math.PI).ToString()
    Else
        txtDegrees.Text = ""
    End If
    Updating = False
End Sub

现在计算正弦很简单:

Private Sub btnSin_Click(sender As Object, e As EventArgs) Handles btnSin.Click
    Dim value As Double
    If Double.TryParse(txtRadians.Text, value) Then
        lblResult.Text = Math.Sin(value).ToString()
    Else
        lblResult.Text = "Invalid input"
    End If
End Sub