2017-01-08 141 views
1

我是C#的新手。我以爲我知道一些C#但顯然不是。在C#中傳遞變量#

作爲一個例子,我使用一個非常簡單的形式與一個按鈕和一個自定義文本框。點擊該按鈕應該給我定製文本框的內容,但我越來越

錯誤CS0103名稱「T」不在當前情況下存在

我已經嘗試了所有可能的提供的選項,但沒有運氣。

當我使用工具箱中的靜態文本框(名爲tb)時,它的工作原理沒有任何錯誤。下面是我的代碼:

public Form1() 
{ 
    InitializeComponent(); 
} 

public void Form1_Load(object sender, EventArgs e) 
{ 
    TextBox tb = new TextBox(); 

    tb.Dock = System.Windows.Forms.DockStyle.Fill; 
    tb.Location = new System.Drawing.Point(600, 430); 
    tb.Multiline = true; 

    panel2.Controls.Add(tb); 
} 

public void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(tb.Text); 
} 

我試圖搜索谷歌和堆棧溢出,但我不知道該怎麼尋找。

+1

'我不知道要搜索什麼' - 嘗試「變量範圍」。 – GSerg

+0

按鈕的聲明tb:TextBox tb = new TextBox();是Form1_Load方法的語言環境。您必須在類中聲明tb爲全局 –

+1

[C#引用來自其他方法的變量]的可能重複(http://stackoverflow.com/questions/9301197/c-sharp-referencing-a-variable-from-another-method ) –

回答

4

這是一個範圍問題。你在你的方法中聲明瞭tb,所以在方法之外它不存在。要聲明tb方法之外的類本身:

TextBox tb; 

public Form1() 
{ 
    InitializeComponent(); 
} 

public void Form1_Load(object sender, EventArgs e) 
{ 
    tb = new TextBox(); 

    tb.Dock = System.Windows.Forms.DockStyle.Fill; 
    tb.Location = new System.Drawing.Point(600, 430); 
    tb.Multiline = true; 

    panel2.Controls.Add(tb); 
} 

public void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(tb.Text); 
} 
2

tb變量在Form_Load()上下文中定義。然後將其添加到面板中,然後超出範圍。您需要找到另一種方式來訪問您的文本框......例如,通過將其設置爲類的成員變量。