Vb.net 文本框和货币格式

Vb.net 文本框和货币格式,vb.net,textbox,currency,windows-forms-designer,currency-formatting,Vb.net,Textbox,Currency,Windows Forms Designer,Currency Formatting,在Visual Studio 2019中作为Windows窗体应用程序进行计算并使用Visual basic代码后,我尝试格式化两个特定的文本框,以显示为Sq.ft.(txt.Squareft.text)和US currency(txtTotalprice.text)。我正在使用.NET framework v4.7.2和Windows 10。按照现在的运行方式,文本框中显示的数字只是数字,末尾没有添加平方英尺,也没有货币格式。我还要补充一点,我对VB和一般编程都很陌生。有什么帮助或建议吗 Op

在Visual Studio 2019中作为Windows窗体应用程序进行计算并使用Visual basic代码后,我尝试格式化两个特定的文本框,以显示为Sq.ft.(txt.Squareft.text)和US currency(txtTotalprice.text)。我正在使用.NET framework v4.7.2和Windows 10。按照现在的运行方式,文本框中显示的数字只是数字,末尾没有添加平方英尺,也没有货币格式。我还要补充一点,我对VB和一般编程都很陌生。有什么帮助或建议吗

Option Explicit On
Option Infer Off

Public Class Form1
    Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
'Variables
        Dim decTotalprice As Decimal
        Dim decLength As Decimal
        Dim decWidth As Decimal
        Dim decPrice As Decimal
        Dim decSquareft As Decimal
        Decimal.TryParse(txtLength.Text, decLength)
        Decimal.TryParse(txtWidth.Text, decWidth)
        Decimal.TryParse(txtPrice.Text, decPrice)
        Decimal.TryParse(txtSquareft.Text, decSquareft)
        txtTotalprice.Text = decTotalprice.ToString("C2")
        txtSquareft.Text = decSquareft.ToString("N2") & " Sq. ft."
' Calculate the square feet and total price
        txtSquareft.Text = txtLength.Text * txtWidth.Text
        txtTotalprice.Text = txtPrice.Text * txtSquareft.Text
End Sub

    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
        ' Clears all the text fields with button click
        txtLength.Clear()
        txtWidth.Clear()
        txtPrice.Clear()
        txtSquareft.Clear()
        txtTotalprice.Clear()
    End Sub

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
        ' Exits the form
        Me.Close()
    End Sub
End Class

这里有两个主要问题,我觉得我每天至少要提十次。首先,您试图在不知道代码必须做什么的情况下编写代码。您已经考虑了最终结果,但没有考虑实现目标的步骤。如果您已经这样做了,那么很明显您的代码并没有达到预期的效果。其次,您显然没有调试代码,这是任何人在没有得到预期结果时应该做的第一件事。这也会让你看到,如果你考虑到每一行应该做什么,你的代码是没有意义的

如果这是一项手动任务,您将从用户处获得输入,执行计算,然后显示结果。这就是你在这里做的吗?不,不是。首先获得用户输入。这是个开始,但你做错了。就目前情况而言,任何无效输入都以零结尾,但您只是忽略了这一点。接下来要做的是显示尚未计算的格式化输出。如果您进行了调试,您会发现
decTotalprice
decSquareft
在该点都为零。最后进行计算,但使用原始文本输入而不是已解析的数字,然后显示未格式化的结果。您的代码中甚至有一条注释,说明您在显示格式化输出后正在进行计算

不要再写代码了,想想要达到你想要的结果需要哪些步骤。解析用户输入,使用数字数据而不是未解析的文本执行计算,然后以格式显示这些结果。一旦你对你必须做的事情有了一个清晰的想法并进行了手动测试,那么你就可以编写代码来实现这个算法,而不是在你的头脑中产生一些模糊的想法,这些想法只涉及最终的结果,而不涉及其他什么


你当然不是唯一犯这些错误的人,但这些都是基本错误。在某些情况下,这种情况的发生部分是因为糟糕的教学,但也是因为每个人都想跳到性感和有趣的部分,即编写代码,但他们不想做得更难,而只是考虑代码实际必须做的重要部分。当他们没有得到预期的结果时,他们会举手示意,而从来没有真正尝试过修复它。如果您没有尝试理解代码必须执行的操作,您就无法尝试让它执行该操作。

您已经在上有了显式的
选项。努力并将
选项严格设置为
<代码>选项推断
您可能希望将其保持在启用状态。你会立即看到问题。顺便说一句,您应该使用
TryParse
检查输入字符串是否可以转换为类型,因此
如果是Decimal.TryParse(),那么(…)如果是