2017-01-08 137 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()上下文中定义。然后将其添加到面板中,然后超出范围。您需要找到另一种方式来访问您的文本框......例如,通过将其设置为类的成员变量。