2012-01-19 24 views
0

如您所見,我使用的類名是由Visual C#生成的類的默認名稱。我怎樣才能從「Program」類改變名爲「textBox2」的TextBox中的值(這個TextBox已經放置在Form1設計中了)?我嘗試了很多東西,我試過的每件事情都會導致這個錯誤(或者類似於):An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Form1.textBox2'如何從「程序」類訪問TextBox「textBox2」?

如果可以的話,請儘量保持您的答案簡單,謝謝。

回答

1

首先,你一般不應訪問控制,如從你的程序類文本框。相反,您應該在Form1.cs文件中執行此操作。 Form1是一個類,它爲textBox2提供了一個受保護的字段,因此它在類之外不可訪問。如果你想改變Program.cs中的值,你應該添加一個公共函數給Form1來設置textBos2.Text的值。

其次,你似乎只是輸入類名而不是實例的名稱。不同之處在於Textbox是一個類,textBox1和textBox2是實例。 Textbox.Text無效,因爲您需要指定您嘗試獲取或設置文本的WHICH文本框。這與Form1.textBox2相同。 Form1是一個類,可以有很多。您必須指定表單實例的名稱才能訪問其公共成員。

UPDATE:

我只是給你一個類和一個類的實例,靜態字段和非靜態字段之間的區別的簡要說明。請原諒任何囉嗦。

當您創建一個新的Windows窗體應用程序時,Visual Studio將爲您創建一個Form1類型。 Form1是一個類。然後程序使用Form1創建一個表單實例並顯示它。該代碼看起來像這樣:

Form1 form = new Form1; 

在這種情況下,窗體是實例。您可以創建Form1的多個實例。每個實例都有您創建的textBox2,它是Textbox類的一個實例。就像你必須做textBox2.Text來獲取你在窗體上創建的第二個文本框的文本一樣,你必須指定form.textBox2(或者你的公共方法來設置textBox2.Text的值)。 Form1,即使它是一個類之後有一個數字,form是實例。它們與Textbox和textBox2具有相同的關係。

非靜態成員可以被實例訪問。靜態成員可以被課堂使用。靜態成員除非通過實例才能訪問非靜態成員。

+0

我在Form1中有一個公共靜態函數,它試圖通過執行'textBox2.Text =「任何...」來修改textBox2,並且出現錯誤。 –

+0

@SamH由於靜態函數是類(Form1)的成員,並且非靜態字段textBox2是實例的成員,所以無法從靜態函數執行此操作。如果我有兩個Form1像你有兩個文本框一樣,Form1.ChangeText將不知道要更改哪個文本框2。這有任何意義嗎? – smelch

+0

如果我將靜態函數更改爲非靜態函數,則會出現另一個錯誤,它似乎正在出現一圈錯誤哈哈。 –

1

您必須創建Form1類的新實例。
你不能「達到」非靜止無功無new()

var form1 = new Form1(); 
form1.textBox2.Text= "aaa"; 
+2

我認爲yuo必須使用Text屬性來設置文本框的值。 – Hans

+1

@gdoron這些天過於頻繁地使用datagrdiviews玩弄? ;) – nawfal

+0

@Hans。從「值」更改爲「文本」。謝謝 – gdoron

1

你需要讓你的Form1的實例來做到這一點。

Form1 frm = new Form1(); 

然後,你必須建立一個公共的方法來訪問你的文本框,因爲它是一個私人成員。

Form1.cs中:

public void UpdateText(string newValue) 
{ 
    this.textbox2.Text = newValue; 
} 

最後:

frm.UpdateText("new text"); 
0

使textBox2公開或內部。爲此,請從設計者(屬性)調整它的Modifier屬性。然後,從「方案」來實現這個目的在主營:

Form1 f = new Form1(); 
    f.textBox2.Text = "sdfsdf"; 
    Application.Run(f); 

這絕對是一個不好的設計不管怎麼說..請告訴我們你爲什麼會想這一點,我們將在處理實際問題有幫助。

+0

我這樣做的原因是因爲我想在TextBox中打印來自LuaInterface的輸出。也許解決方案是重新安排我使用LuaInterface的方式。 –

+0

@SamH哦。但是您仍然可以將代碼移動到自己的類中。或者在一個單獨的Lua類中,並從表單類中調用它。你的選擇結束.. – nawfal