VB.NET-Can';我不能让Integer工作

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中

我正在Visual Studio 2015中使用Windows窗体应用程序,使用.NET Framework 4.5.2。所以我正在制作一个简单的程序,其中包括一个显示值的标签。标签(称为
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。