2013-03-11 120 views
1

我已經創建了一個文本框並希望在靜態方法中引用它。我怎樣才能做到這一點? 這裏;我的代碼如何在靜態方法中引用非靜態對象

private void Form1_Load(object sender, EventArgs e) 
    { 
     TextBox textbox2 = new TextBox(); 
     textbox2.Text = "A"; 
    } 

    static void gettext() 
    { 
     textbox2.Text = "B"; //here is my problem 
    } 
+0

你不能。你需要一個對象。 – 2013-03-11 10:34:55

+2

另請注意,在您的代碼中,Form1_Load中的textbox2是本地方法,而不是類。定義Textbox textbox2外Form1_Load – rene 2013-03-11 10:36:15

+0

http://stackoverflow.com/questions/498400/an-object-reference-is-required-for-the-nonstatic-field-method-or-property-wi – 2013-03-11 10:36:15

回答

7

你就需要把它傳遞到靜態方法不知何故,最簡單的選擇是僅擴展方法簽名接受文本框:

static void gettext(TextBox textBox) 
{ 
    textBox.Text = "B"; //here is my problem 
} 
+0

謝謝。有效。 – user1853846 2013-03-11 10:52:05

+0

@ user1853846不要忘記接受你認爲是最好的答案(在這種情況下,勞埃德的) – Nolonar 2013-03-11 10:58:18

+1

@ user1853846如果你不知道如何接受答案,或爲什麼你應該這樣做:http:// meta .stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Nolonar 2013-06-06 15:06:31

2

我不是確定你明白什麼是靜態的意思,靜態意味着它屬於CLASS而不是類的實例。可能對您的問題更好的解決方案是創建一個設置文本的實例方法。

// private variable 
private TextBox textbox2; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    // refers to private instance variable 
    textbox2 = new TextBox(); 
    textbox2.Text = "A"; 
} 

private void gettext() 
{ 
    // refers to private instance variable 
    textbox2.Text = "B"; 
} 

如果您在理解static時遇到困難,您不需要使用它。靜態成員可用於類的所有實例,但不屬於它們中的任何一個,這意味着靜態方法不能訪問私有成員。

+1

爲什麼會得到低投票?它沒有使用「靜態」方法,但據我所知,這是一個完全有效的答案,我錯過了什麼? – Nolonar 2013-03-11 10:47:04

+1

也不知道爲什麼(它不是直接回答明確的問題,是的,但它肯定會給出什麼可能是最好和最有用的答案,在我心中)+1 – baldric 2013-03-11 10:52:40

4

你應該給你的文本作爲參數傳遞給靜態方法

static void gettext(TextBox textbox) 
{ 
    textbox.Text = "B"; 
} 
2

你可以這樣做

static void gettext(TextBox textbox2) 
{ 
    textbox2.Text = "B"; 
} 

而在代碼

private void Form1_Load(object sender, EventArgs e) 
{ 
    YourClass.gettext(textbox2); 
} 
-1

您可以創建一個靜態變量載入:

private static readonly TextBox _textBox = new TextBox(); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    _textBox.Text = "A"; 
} 

static void gettext() 
{ 
    _textbox2.Text = "B"; 
} 
+0

該文本框是隻讀的,永不重新分配,只有文本屬性。如果您願意,可以刪除只讀文件並在Load方法上創建文本框。 – Toto 2013-03-11 13:08:17

相關問題