2013-04-21 16 views
0
String ^% text = button->Text ; 
text = "something" ; 

應該更改按鈕的文本,但它不。如何通過引用傳遞按鈕或其他控件的文本

+1

[?爲什麼字符串是不可變的,什麼是它的意義(http://www.codeproject.com/Articles/406046/Why-strings-are -immutable-what-the-implica) – I4V 2013-04-21 14:17:23

回答

3

這不能工作,代碼只會更新對象。它沒有達到這個目標,並且還更新了TextBox :: Text屬性。這不僅僅是因爲這是一個字符串,正如在重複鏈接中所暗示的那樣,它也不適用於簡單的值類型屬性。

這是因爲屬性不是值,您不能創建對它們的引用。當你使用它們時,它們看起來像語法中的值。但是當你聲明它們時肯定不是,注意你如何編寫get和set方法。所以要更新文本框中顯示的文本,你必須調用屬性的set方法。這不僅僅是一個簡單的變量賦值,它是一個方法調用。直觀上可能很明顯,注意如何分配Text屬性有很多副作用。你可以在屏幕上看到它。

要間接調用方法,您需要另一輛車,您需要代表。非常類似於C中的函數指針。任何關於.NET編程的介紹性書籍都會解釋它們。您可以聲明自己的委託類型,但更喜歡內置.NET框架的通用類型。添加對System.Core的引用,以便可以使用通用動作<>委託類型。你需要先寫來分配Text屬性的方法:

private: 
    void updateTextBox(String^ text) { 
     textBox1->Text = text; 
    } 

這將有這樣的樣品的方法進行更新:

void Test(Action<String^>^ updater) { 
     updater("foo"); 
    } 

,並注意有這種方法可以更新任何文本框中,您通過的委託對象決定哪個。您的代碼創建委託變量是這樣的:

Test(gcnew Action<String^>(this, &Form1::updateTextBox)); 
+0

好的,我明白了。非常感謝你 ! – Jozekban 2013-04-21 18:55:45

相關問題