VB.NET-Can';我不能让Integer工作
我正在Visual Studio 2015中使用Windows窗体应用程序,使用.NET Framework 4.5.2。所以我正在制作一个简单的程序,其中包括一个显示值的标签。标签(称为VB.NET-Can';我不能让Integer工作,vb.net,winforms,integer,Vb.net,Winforms,Integer,我正在Visual Studio 2015中使用Windows窗体应用程序,使用.NET Framework 4.5.2。所以我正在制作一个简单的程序,其中包括一个显示值的标签。标签(称为lblMoney)显示货币(在本例中为$),然后显示值(例如350)。加在一起看起来像是350美元 现在,我用一个名为txtCash的textbox和一个名为bApply的按钮制作了另一个表单。您可以在txtCash中输入任何整数(例如350)。按bApply时,txtCash中的数字将添加到lblMoney中
lblMoney
)显示货币(在本例中为$
),然后显示值(例如350
)。加在一起看起来像是350美元
现在,我用一个名为txtCash
的textbox
和一个名为bApply
的按钮制作了另一个表单。您可以在txtCash
中输入任何整数(例如350
)。按bApply
时,txtCash
中的数字将添加到lblMoney
中的数字。因此,如果您在lblMoney
中有5
,并且在txtCash
中输入350
,lblMoney
将显示355
以下是我的代码,请将其添加到号码中:
My.Forms.VeilSideCash.lblMoney.Text = cstrx + txtCash.Text.ToString
表单VeilSideCash
是保存lblMoney
的表单
以下是cstrx的代码:
Dim cstrx = "$" & Val(My.Settings.Money.ToString)
这里的问题是,不是将覆盖到lblMoney
,而是将新号码添加到原始号码之后。因此,如果lblMoney
拥有5
并且您在txtCash
中输入350
,lblMoney
看起来像$5350
我如何用新号码(添加
到)覆盖
,而不是替换
任何帮助都将不胜感激。请随意编辑,以防我在解释时弄错了什么。您需要删除“$”并将其转换为数字。我使用了十进制,因此如果需要,可以包括美分:
Dim sum As Decimal
sum = Val(cstrx.Replace("$","")) + Val(txtCash.Text)
My.Forms.VeilSideCash.lblMoney.Text = sum.ToString()
Dim cstrx = sum.ToString("C")
请注意,我使用“C”将总和格式化为货币。这会自动为您添加美元,或为其他国家使用其他货币符号
我不是一个大的VB.net用户,所以我的语法可能有点不正确。代码的问题是项目的选项严格设置。您将其设置为Off,这允许您的代码自由地将字符串视为数字,并尝试在数学运算中使用它们
但是,当您在两个字符串之间使用+运算符时,对于人类来说,这两个字符串是否代表一个数字并不重要,编译器将它们视为字符串(cstrx,txtCash.Text),并认为您希望使用为字符串定义的串联运算符(+运算符)。产生错误的结果
我真的建议您不要在代码中使用编译器进行的自动转换,相反,当您需要进行数学运算时,请始终将字符串转换为数字,并使用数值类型的变量进行数学运算(您也可以将选项Strict更改为On,但您应该准备好解决当前代码中的许多问题)
相反,使用正确的数字方法,您可以获取txtCash中的文本,并尝试检查用户是否正确键入了十进制值
Dim cash As Decimal
if Not decimal.TryParse(txtCash.Text, cash) Then
MessageBox.Show("Invalid cash value")
Return
End if
现在获取lblMoney的文本并将其转换回十进制数,提醒编译器文本中有货币符号要转换
Dim current As Decimal
current = decimal.Parse(lblMoney.Text, NumberStyles.Currency, CultureInfo.CurrentCulture)
现在您有了两个数字,+运算符完成了预期的操作。它将两个数字相加。最后您可以使用正确的货币格式写回结果
Dim result as Decimal
result = current + cash
lblMoney.Text = result.ToString("C")
使用带有字符串的+
运算符时,可能会出现意外结果。在这种情况下,带有$
的字符串不能隐式转换,因此应显式转换
将字符串转换为数字类型后,就可以使用+
运算符,将字符串隐式转换回字符串
My.Forms.VeilSideCash.lblMoney.Text = decimal.Parse(cstrx, NumberStyles.Currency)
+ decimal.Parse(txtCash.Text ,NumberStyles.Currency)
请向我们展示您的代码,而不是描述它。这样做更容易。VB不知道如何处理“$”。您需要删除它,转换为整数,将它们相加,然后再转换回字符串。@GarrGodfrey如何将$
作为字符串转换为整数?请原谅我的无知..从启用选项Strict开始。整数没有小数,但有Val()始终返回double
我将您的代码包含在bApply
的子部分中。我将Dim cstrx设置为double=Val(My.Settings.Money.ToString)
正上方bApply
的子项位于cstrx。替换
我得到一个错误局部变量“cstrx”在声明之前不能被引用。
。其他一切看起来都很好。cstrx是双精度的?不能存储“$”在双精度上。cstrx必须是字符串。请记住,我只是按照您在问题中使用的顺序来放置语句。是的,您必须在使用它之前设置cstrx。