摄氏到华氏转换器

时间:2018-11-01 16:38:36

标签: vb.net

从摄氏温度转换为华氏度时,我的摄氏温度转换为华氏度,但反之亦然。

我认为它可能与两次数学运算有关,但我不确定。

What my program looks like

这是我的代码:

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

1 个答案:

答案 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中不建议使用),并注意ValMicrosoft.VisualBasic名称空间的遗留函数,使您的代码像VB6一样读取。改用.NET惯用的类型转换和转换。 Val会返回Double,因此尽管从StringDouble进行了显式转换,但 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固定为主题)。