首页 > 解决方案 > 通过函数将小数添加到文本框

问题描述

当按下某些按钮时,我有一段代码要在整个表单中重复多次。在单击按钮时,它应该通过因按钮而异的值添加到文本框中的十进制值。到目前为止,我的代码如下所示:

Function EditPrice(ByVal a As Decimal, ByVal b As Decimal)
    Dim num1 As Decimal
    num1 = a + b
    Return num1
End Function

Private Sub btnMinusMushroom_Click(sender As Object, e As EventArgs) Handles btnMinusMushroom.Click
    EditPrice(CDec(txtEditCost.Text) + "0.5")
  End Sub

如果不清楚代码应该做什么,函数“EditPrice”中的变量“a”是文本框“txtEditCost”内的十进制值,十进制值 0.5 是应该添加到的值文本框值。

函数名称带有红色下划线,表示“未为 'public function EditPrice(ByVal a As Decimal, ByVal b As Decimal) as object' 的参数 'b' 指定参数”。我不知道这意味着什么或如何解决问题,有什么想法吗?,谢谢

标签: vb.net

解决方案


您的代码存在许多问题。为了帮助您以后避免此类问题,我强烈建议您设置Option Strict On. 这将不允许缩小隐式转换和后期绑定,这将迫使您更多地考虑您正在使用的数据类型。您可以On在项目属性中为当前项目设置它。您还可以On在 IDE 选项中设置它,以便On默认情况下用于所有未来的项目。

第一个问题是Option Strict On会标记的问题,即您声明了一个没有返回类型的函数。这个:

Function EditPrice(ByVal a As Decimal, ByVal b As Decimal)

应该是这样的:

Function EditPrice(ByVal a As Decimal, ByVal b As Decimal) As Decimal

第二个问题与该函数的命名有关。您已经命名了它,EditPrice但是如果您查看该方法的实际代码,则该名称与它毫无关系。那里没有价格,也没有编辑。它所做的只是添加两个类型Decimal的数字并返回结果。没有什么需要数字来代表价格,也没有任何内容被编辑,因为该方法没有改变任何内容。

第三个问题是您如何调用该方法。该方法被声明为采用两个Decimal参数但是你在做什么?

EditPrice(CDec(txtEditCost.Text) + "0.5")

这有什么意义?您从 a 获得StringaTextBox并将其转换为 a Decimal,然后将另一个添加String到其中,然后将该单个结果传递给该方法。那是各种各样的错误。首先,为什么要添加 aString到 a Decimal?如果您想将数字 0.5 添加到某物上,请使用数字,而不是String. 如果要添加到 aDeciaml然后使用`十进制数。其次,当方法的重点是将两个数字相加时,为什么要在那里添加两个数字并将结果传递给方法?该代码应该更像这样:

EditPrice(CDec(txtEditCost.Text), 0.5D)

这仍然是一个问题,因为正如我所说,该EditPrice方法实际上并没有编辑任何内容。它只是添加两个输入并返回结果,但您实际上并没有使用该结果。您可能想在某处显示该结果。如果它TextBox再次相同,那么你需要这样做:

txtEditCost.Text = EditPrice(CDec(txtEditCost.Text), 0.5D).ToString()

也请注意ToString那里的电话。这将是必需的,Option Strict On因为该Text属性是 typeString并且该方法返回一个Decimal.

即使进行了这些更改,代码仍然有点狡猾。当您可以使用简单的加法运算符内联时,将两个数字相加并返回结果的方法有什么意义?如果要命名一个方法,EditPrice那么它实际上应该编辑一个价格。在这种情况下,将单个数字添加到当前价格然后让方法进行更改会更有意义,例如

Private Sub EditPrice(valueToAdd As Decimal)
    Dim currentValue As Decimal

    'This will get the current value or zero if there is no valid value.
    Decimal.TryParse(txtEditCost.Text, currentValue)

    Dim newValue As Decimal = currentValue + valueToAdd

    txtEditCost.Text = newValue.ToString()
End Sub

请注意,这是 aSub而不是 aFunction因为它实际上进行了更改,而不是返回其他代码用来进行更改的值。在这种情况下,名称实际上描述了该方法的作用。方法名称应始终描述该方法的实际作用。


推荐阅读