VB WPF 标签内容不显示数学计算

Posted

技术标签:

【中文标题】VB WPF 标签内容不显示数学计算【英文标题】:VB WPF Label Content Not Showing Math Calculation 【发布时间】:2021-05-28 05:17:09 【问题描述】:

今天我挑战自己,用我不懂的语言 (VB) 制作一个简单的数学应用程序。 来自 C#,我认为它会很快,但至少可以说我错了。

我要做的是计算用户在 inputAlpha 和 inputBeta 文本框中实时输入的两个值,并在标签右侧的相应标签框中显示 Sum/Difference/Average/etc看看。目前,我陷入了两个问题的僵局。一个是 sumOutput.Content 没有显示局部变量 sum 是整数还是字符串的总和。第二个是数学实际上并不是将 10+10 相加,而只是将两者结合到 1010。我知道这对 99% 的人来说可能是微不足道的,但我来这里是为了从我的错误中吸取教训,所以我感谢你的任何反馈。

【问题讨论】:

作为下面出色答案的旁注,WPF 更“典型”的用法是使用数据绑定而不是直接操作控件。您可以将结果分配给属性并引发PropertyChanged 事件,然后将在 xaml 中设置控件以从属性中获取其值。 【参考方案1】:

第一期:

这在 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()。因为它期待一个表达式,所以当它决定如何解释= 运算符时,它会选择相等。所以它试图返回TrueFalse

这就是奇怪的地方,我正在做一些猜测。

您的函数返回Integer,但那是Boolean。那么为什么你没有得到一个编译错误呢?我将大胆猜测并假设您没有更改默认值,因此Option Strict 已关闭。这允许 VB 进行一些您可能没有预料到的类型转换。 IIRC,False 将转换为整数 0True 将转换为整数 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

没有什么可以返回,调用站点也不期望返回,所以它应该没有返回值。在 C# 中是 void 函数,在 VB 中是 Sub。删除 Return 语句有助于 VB 了解您想要执行赋值,而不是进行比较。

【讨论】:

感谢您的详尽解释。想想我对知识的追求扩大了,我的眼睛睁大了,为什么我做错了。

以上是关于VB WPF 标签内容不显示数学计算的主要内容,如果未能解决你的问题,请参考以下文章

WPF窗体,具体如图:最小化和关闭鼠标滑过显示,但是就不显示内容。偶尔出现,望大神帮忙分析分析。

dotnet 在 WPF 里显示数学 π 的颜色

dotnet 在 WPF 里显示数学 π 的颜色

WPF中,ComboBox值显示问题

WPF使用webbrowser控件时,每次打开都显示“Web浏览器已经限制此文件显示可能访问您的计算机的活动内容“,解决办法

VB中randomize是用来产生啥样的随机数啊?