2011-10-31 58 views
0

我有一個包含對象「TextBox1中」(TextBox1的控制)VB.NET類的麻煩

在代碼段中我已經初始化的新文本框對象不是這樣的形式的一種形式:

Dim aa As New TextBox 
    aa = TextBox1 'THE CONTROL ON THE FORM 
    aa.Text = "hi how are you?" 

窗體上的TextBox1現在改爲寫「你好嗎?」

不應該是「aa」對象和「TextBox1」分開嗎?意味着改變一個物體不會影響另一個物體?

爲什麼會發生這種情況? 以及如何防止這種情況?

意味着將對象彼此分開。

編寫代碼以這種形式

Public Sub blah(ByVal aa As TextBox) 
    aa.Text = "hi how are you?" 
End Sub 

然後通過

blah(TextBox1) 

調用子不解決問題。

+1

我認爲更大的問題是爲什麼你需要一個TextBox1的隱藏克隆?爲什麼不只是文本的字符串變量? – LarsTech

+0

我在多線程中需要這個 –

回答

1

.Net對象通過引用傳遞。
aaTextBox1都指代相同的TextBox實例。

您可以通過將其實例的屬性複製到其他實例來手動創建實例的副本。

+0

是的,我認爲是的但我該怎麼做可以通過將其實例的屬性複製到其他實例來手動創建實例的副本。 –

0

當您設置一個對象等於另一個,在這種情況下aaTextBox1aa現在是一個指向TextBox1和向它提出將影響任何行動。

將它用作值的方法是在函數中使用實例。因此。

Public Sub process(ByVal aa as Object) 

'do stuff 
End Sub 
+0

我想將對象與另一個分開 –

+0

創建一個單獨的函數將允許您將它作爲ByVal傳遞,而不是指針。 – CamelSlack

+0

沒有相同的事情發生 它沒有解決問題 –

0

據我所知,是克隆一個TextBox沒有簡單的方法,但如果你想做到這一點,你可以在相關的屬性複製:

Dim aa As New TextBox 
aa.Text = TextBox1.Text 
'Copy over other relevant properties here 
aa.Text = "hi how are you?" 

LarsTech提出了一個很好的問題,但。你真的需要克隆整個文本框嗎?僅僅複製文本就不夠了嗎?

另請注意,您發佈的代碼並不符合您的想法。這樣做是這樣的:

Dim aa As New TextBox 
aa = TextBox1 

你第一次分配aa變量到新創建的文本框,那麼你重新分配這個變量對現有TextBox1的。你剛剛失去了對新創建的文本框的引用。