【问题标题】:Textbox and currency formatting文本框和货币格式
【发布时间】:2020-02-13 11:39:10
【问题描述】:

我正在尝试格式化两个特定的文本框以显示为 Sq。 ft. (txt.Squareft.Text) 和美国货币 (txtTotalprice.Text) 在 Visual Studio 2019 中作为 Windows 窗体应用程序并使用 Visual Basic 代码进行计算后。我正在使用 .NET framework v4.7.2 并使用 Windows 10。它现在的运行方式,显示在文本框中的数字只是没有添加 Sq 的数字。 ft. 最后没有货币格式。我还要补充一点,我对 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

【问题讨论】:

  • 您已经拥有Option Explicit On。努力也设置Option Strict OnOption Infer 你可能想保留它On。您会立即看到问题所在。顺便说一句,您应该使用TryParse来检查输入字符串是否可以转换为类型,所以If Decimal.TryParse() then (...) end if

标签: vb.net textbox currency windows-forms-designer currency-formatting


【解决方案1】:

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

如果这是一项手动任务,您将从用户那里获取输入,执行计算,然后显示结果。这就是你在这里做的吗?不它不是。首先你得到用户输入。这是一个开始,但你做错了。就目前而言,对于任何无效输入,您都将以零结尾,但您只是忽略了这一点。接下来要做的是显示您甚至还没有计算过的格式化输出。如果您进行了调试,您会看到decTotalpricedecSquareft 在那时都为零。您最终进行了计算,但使用原始文本输入而不是您已经解析的数字,然后显示未格式化的结果。你甚至在你的代码中有一条注释说你在显示格式化的输出之后进行计算。

停止编写代码,想想需要哪些步骤才能达到您想要的结果。解析用户输入,使用数字数据而不是未解析的文本执行计算,然后使用格式显示这些结果。一旦你清楚地知道你必须做什么并手动测试了它,你就可以编写代码来实现该算法,而不是在你的脑海中出现一些涉及最终结果的模糊想法。

你肯定不是唯一犯这些错误的人,但它们是基本错误。它们的发生部分是因为在某些情况下教学不好,但它们的发生也是因为每个人都想跳入性感和有趣的部分,即编写代码,但他们不想做更难但同样重要的部分考虑代码实际上必须做什么。当他们没有得到预期的结果时,他们会举手投降,而从未真正尝试过解决它。如果您还没有尝试了解代码必须做什么,那么您就不可能尝试让它这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2015-10-24
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多