我对编程很陌生,无法在这些论坛上找到答案。
我正在使用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值。
有任何建议/解决方案吗?谢谢!
答案 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