2014-10-01 66 views
0
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时(TxtDiameter10框中的文本为10并锁定),值将保持为0。我知道直径初始化,因为如果我设置TxtRadius10.Text =直径/ 2,它会回来5.为什么我的公共变量不像预期那样工作?

+0

帮自己一个忙,需要定义直径,并把'选项严格On'在你的代码的顶部或设置在您的项目的属性。 – 2014-10-02 13:59:03

回答

2

这不是做你觉得它在做什么:

Public radius As Decimal = diameter/2 

radius变量没有按” t将参考保留为diameter变量以供将来计算。该赋值语句计算它一次当前值值并将结果置于radius中。 diameter的当前值是:

Public diameter As Integer 

那么,它是未分配的。所以它默认为0。并且0/20。因此radius正在初始化为0,并且它从未在代码中再次分配。所以它永远是0

如果你想每一个它的访问时间来动态计算值,使其属性:

Public Property radius As Decimal 
    Get 
     Return diameter/2 
    End Get 
End Property 

我们radius任何引用将运行Get逻辑,只要它的访问,并在重新计算值飞。

0

你有一个意想不到的循环。

当您在TxtRadius10_TextChanged事件中更改TxtRadius10.Text的值时,它会再次触发该事件。由于直径始于0(整数的默认值),因此半径值从0(0/2)开始。

你也应该知道,当你更新直径时,Radius不会更新。你刚刚为它设置了一个初始值。每当直径发生变化时,您都必须重新计算半径。

0

您声明的是radius = diameter/2 但是直径在它遇到此语句时未定义。

首先定义半径

相关问题