从摄氏温度转换为华氏度时,我的摄氏温度转换为华氏度,但反之亦然。
我认为它可能与两次数学运算有关,但我不确定。
这是我的代码:
Public Class frmConversion
Private Sub frmConversion_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AcceptButton = btnConvertir
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnConvertir.Click
Dim intF As Decimal
Dim intC As Decimal
intC = Val(txtbxEntreeC.Text)
intF = Val(txtbxEntreeF.Text)
If Me.lblCelsius.Location.Y = 101 And Me.lblCelsius.Location.X = 39 Then
'Crée un Integer pour Fahrenhei et Celcius
intF = intC * 9.0 / 5.0 + 32.0
Me.txtbxEntreeF.Text = intF
End If
If Me.lblCelsius.Location.X = 29 And Me.lblCelsius.Location.Y = 202 Then
intC = (intF - 32) * 5 / 9
Me.txtbxEntreeF.Text = intC
End If
End Sub
Private Sub btnSwitch_Click(sender As Object, e As EventArgs) Handles btnSwitch.Click
'if this is F, then we switch the c back to c and the f back to f, otherwise we do the opposite
If Me.lblCelsius.Location.Y = 101 And Me.lblCelsius.Location.X = 39 Then
Me.lblCelsius.Location = New Point(29, 202)
Me.lblFahrenheit.Location = New Point(39, 101)
txtbxEntreeC.Location = New Point(273, 98)
txtbxEntreeF.Location = New Point(273, 199)
txtbxEntreeC.Text = ""
txtbxEntreeF.Text = ""
ElseIf Me.lblCelsius.Location.X = 29 And Me.lblCelsius.Location.Y = 202 Then
Me.lblCelsius.Location = New Point(39, 101)
Me.lblFahrenheit.Location = New Point(29, 202)
txtbxEntreeC.Location = New Point(273, 199)
txtbxEntreeF.Location = New Point(273, 98)
txtbxEntreeC.Text = ""
txtbxEntreeF.Text = ""
End If
End Sub
End Class
答案 0 :(得分:1)
Dim intF As Decimal Dim intC As Decimal intC = Val(txtbxEntreeC.Text) intF = Val(txtbxEntreeF.Text)
int
是一个Systems Hungarian前缀,使您的变量看起来像是 int egs,不是。他们是Decimal
。删除匈牙利表示法(在.NET中不建议使用),并注意Val
是Microsoft.VisualBasic
名称空间的遗留函数,使您的代码像VB6一样读取。改用.NET惯用的类型转换和转换。 Val
会返回Double
,因此尽管从String
到Double
进行了显式转换,但 still 仍从{ {1}}至Double
。选择一种类型,坚持下去。
Decimal
此处的隐式转换是从Me.txtbxEntreeF.Text = intF
到Decimal
。
是否可以限制文本框中的小数位数?
是的。明确显示转换,然后format the string。
String
就像处理VBA UserForm代码一样,我强烈建议为您的模型创建一个专用的类,以将逻辑与数据分离。这样,您可以为每个度量单位设置一个Me.txtbxEntreeF.Text = String.Format("{0:D2}", intF)
值,将转换逻辑封装在一个位置,然后形成仅负责与此“模型”进行交互并格式化其属性以进行显示的形式。 Form的后台代码本身没有实现转换逻辑的业务-研究 Model-View-Presenter UI模式如何使您的代码更健壮。
请在Code Review上发布您的有效代码,以获取反馈和想法(询问如何在CR上执行X或如何将Y固定为主题)。