vb.net - 通过函数将小数添加到文本框
问题描述
当按下某些按钮时,我有一段代码要在整个表单中重复多次。在单击按钮时,它应该通过因按钮而异的值添加到文本框中的十进制值。到目前为止,我的代码如下所示:
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' 指定参数”。我不知道这意味着什么或如何解决问题,有什么想法吗?,谢谢
解决方案
您的代码存在许多问题。为了帮助您以后避免此类问题,我强烈建议您设置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 获得String
aTextBox
并将其转换为 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
因为它实际上进行了更改,而不是返回其他代码用来进行更改的值。在这种情况下,名称实际上描述了该方法的作用。方法名称应始终描述该方法的实际作用。
推荐阅读
- java - 迁移 java 7 到 java 8 - forEach 中的 forEach 并导致 HashMap?
- php - 标识符名称太长zend框架2
- jakarta-ee - 无状态bean不公开实现接口的默认方法
- c++ - 返回指令
- ios - SwiftUI 动画/转换覆盖视图不起作用
- cpu-architecture - 内存标记扩展会在 x86 中实现吗?
- c++ - 以正确的顺序从十进制转换为二进制
- c# - CI 无法构建 .NET 项目,失败并显示:“找不到安装在系统上的有效 ICU 包...”
- applescript - 苹果脚本。Firefox 中的窗口名称
- java - Keycloak 7.0.0 Standalone.sh 启动错误:IJ000604:尝试获取新连接时可抛出:null