Public Class Form1
Public diameter As Integer
Public radius As Decimal = diameter / 2
Private Sub TxtRadius10_TextChanged(sender As Object, e As EventArgs) Handles TxtRadius10.TextChanged, TxtDiameter10.TextChanged
diameter = TxtDiameter10.Text
TxtRadius10.Text = radius
End Sub
End Class
TxtRadius10中的值在应为5时保持返回0(TxtDiameter10框中的文本为10并锁定)。我知道直径正在初始化,因为如果我设置TxtRadius10.Text = diameter / 2,它将返回5.
答案 0 :(得分:2)
这不是你认为它做的事情:
Public radius As Decimal = diameter / 2
radius
变量不会将引用保存到diameter
变量以供将来计算。此赋值语句使用当前值计算一次,并将结果放在radius
中。 diameter
的当前值为:
Public diameter As Integer
嗯,这是未分配的。所以它默认为0
。 0 / 2
是0
。因此,radius
正在初始化为0
,并且它从未在代码中再次分配。所以它始终是0
。
如果您想在每次访问时动态计算该值,请将其设为属性:
Public Property radius As Decimal
Get
Return diameter / 2
End Get
End Property
现在,对radius
的任何引用都会在访问时运行Get
逻辑,并在运行时重新计算该值。
答案 1 :(得分:0)
你已经让自己陷入了无意识的循环。
当您在TxtRadius10_TextChanged事件中更改TxtRadius10.Text的值时,它会再次触发该事件。由于直径从0开始(整数的默认值),因此半径值从0(0/2)开始。
您还应该知道更新直径时Radius不会更新。您只需为其设置初始值即可。无论何时直径发生变化,您都必须重新计算半径。
答案 2 :(得分:0)
你宣称半径=直径/ 2 但是,当遇到此声明时,未定义直径。
在定义半径之前先定义直径