2014-10-01 69 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 但是直徑在它遇到此語句時未定義。

首先定義半徑

相關問題