VB WPF 标签内容不显示数学计算
VB WPF Label Content Not Showing Math Calculation
今天我挑战自己用我不懂的语言制作一个简单的数学应用程序 (VB)。
来自 C# 我认为它会很快但是至少可以说我错了。
我想做的是计算用户在 inputAlpha 和 inputBeta 文本框中实时输入的两个值,并在标签右侧的相应标签框中显示 Sum/Difference/Average/etc确实看到了。目前我陷入了两个问题的僵局。一个是 sumOutput.Content 不显示局部变量 sum 是整数还是字符串的总和。第二个是数学实际上并不是将 10+10 相加,而只是将两者相加得到 1010。我知道这对 99% 的人来说可能微不足道,但我来这里是为了从我的错误中吸取教训,所以我感谢你的任何反馈。
第一期:
这在 C# 中也无法正常工作。
在 VB 中,与 C# 一样,+
运算符执行双重任务。它可以执行数学运算或连接字符串。由于您在两边都使用 Text
属性,因此您有 String + String
来连接字符串。如果你想做数学,你需要先把值转换成数字。例如,您可以:
Dim left As Integer = Integer.Parse(inputAlphaTextBox.Text)
Dim right As Integer = Integer.Parse(inputBetaTextBox.Text)
Dim sum As Integer = left + right
第二期:
VB 不像 C# 那样有单独的赋值运算符 (=
) 和相等运算符 (==
)。它使用符号 =
来表示赋值和相等,并使用上下文来决定它需要哪一个。
由于您使用的是 Return
,它假定右侧有一个表达式。该表达式是 sumOutput.Content = sum.ToString()
。由于它需要一个表达式,因此当它决定如何解释 =
运算符时,它会选择相等性。所以它试图 return True
或 False
.
这就是它变得奇怪的地方,我正在做一些猜测。
你的函数 returns Integer
,但那是一个 Boolean
。那你为什么没有得到编译错误?我将大胆猜测并假设您没有更改默认值,因此 Option Strict
已关闭。这允许 VB 进行一些您可能不期望的类型转换。 IIRC,False
将转换为整数 0
,True
将转换为整数 1
。
即使在 C# 中,编写的代码也不是很好的实践。真的应该这样写:
Private Sub DoMath()
Dim left As Integer = Integer.Parse(inputAlphaTextBox.Text)
Dim right As Integer = Integer.Parse(inputBetaTextBox.Text)
Dim sum As Integer = left + right
subOutput.Content = sum.ToString()
End Sub
return 没有任何内容,并且调用站点不期望有任何内容,因此它应该没有 return 值。在 C# 中,这是一个 void
函数,在 VB 中,这是一个 Sub
。删除 Return
语句有助于 VB 了解您想要执行赋值,而不是进行比较。
今天我挑战自己用我不懂的语言制作一个简单的数学应用程序 (VB)。 来自 C# 我认为它会很快但是至少可以说我错了。
我想做的是计算用户在 inputAlpha 和 inputBeta 文本框中实时输入的两个值,并在标签右侧的相应标签框中显示 Sum/Difference/Average/etc确实看到了。目前我陷入了两个问题的僵局。一个是 sumOutput.Content 不显示局部变量 sum 是整数还是字符串的总和。第二个是数学实际上并不是将 10+10 相加,而只是将两者相加得到 1010。我知道这对 99% 的人来说可能微不足道,但我来这里是为了从我的错误中吸取教训,所以我感谢你的任何反馈。
第一期:
这在 C# 中也无法正常工作。
在 VB 中,与 C# 一样,+
运算符执行双重任务。它可以执行数学运算或连接字符串。由于您在两边都使用 Text
属性,因此您有 String + String
来连接字符串。如果你想做数学,你需要先把值转换成数字。例如,您可以:
Dim left As Integer = Integer.Parse(inputAlphaTextBox.Text)
Dim right As Integer = Integer.Parse(inputBetaTextBox.Text)
Dim sum As Integer = left + right
第二期:
VB 不像 C# 那样有单独的赋值运算符 (=
) 和相等运算符 (==
)。它使用符号 =
来表示赋值和相等,并使用上下文来决定它需要哪一个。
由于您使用的是 Return
,它假定右侧有一个表达式。该表达式是 sumOutput.Content = sum.ToString()
。由于它需要一个表达式,因此当它决定如何解释 =
运算符时,它会选择相等性。所以它试图 return True
或 False
.
这就是它变得奇怪的地方,我正在做一些猜测。
你的函数 returns Integer
,但那是一个 Boolean
。那你为什么没有得到编译错误?我将大胆猜测并假设您没有更改默认值,因此 Option Strict
已关闭。这允许 VB 进行一些您可能不期望的类型转换。 IIRC,False
将转换为整数 0
,True
将转换为整数 1
。
即使在 C# 中,编写的代码也不是很好的实践。真的应该这样写:
Private Sub DoMath()
Dim left As Integer = Integer.Parse(inputAlphaTextBox.Text)
Dim right As Integer = Integer.Parse(inputBetaTextBox.Text)
Dim sum As Integer = left + right
subOutput.Content = sum.ToString()
End Sub
return 没有任何内容,并且调用站点不期望有任何内容,因此它应该没有 return 值。在 C# 中,这是一个 void
函数,在 VB 中,这是一个 Sub
。删除 Return
语句有助于 VB 了解您想要执行赋值,而不是进行比较。