2011-01-05 39 views
0

我正试图将程序的状态写入用户。但是我的方法不起作用。 statusBox是一个文本框窗口。C# - 写入多行文本框

public static void writetoStatus(string text) 
     { 
      TextBox statusBox = new TextBox(); 
      statusBox.Text = text; 
     } 

请帮忙!

+0

看起来没事就必须有像文本变量或错误的文本名称的TECT一些其他的问题吗? – 2011-01-05 18:46:17

+0

我没有看到你的方法有什么问题,但它是静态的,这让我想看看它的代码。其他问题回答:这是否编译?这是ASP.NET还是Windows窗体? – Kendrick 2011-01-05 18:47:53

+0

其实我不明白你想做什么?正试图创建多行文本框(正如我从标题理解)或尝试更新任何文本框的文本? – 2011-01-05 18:48:05

回答

5

您无法使用静态方法访问实例变量。我想不出一种statusBox不会是实例成员的方式。尝试让你的方法是非静态的,它应该没问题。

+0

好赶上+1 ... – 2011-01-05 18:49:50

+0

非常感谢!我删除了创建新文本框的行。摆脱了我的方法中的静态,现在它的工作。比我想象的更简单! :) – user377419 2011-01-05 18:58:17

0

正如前面的回答中所述,您的方法需要是静态的才能访问表单上的TextBox

另外还有一个事实,即您将状态置于新的TextBox而不是表单上的状态。

如果您创建了一个表单并在其上放置了一个TextBox,那么TextBox已经有一个名称,您可以从代码隐藏文件访问它。默认情况下,我认为它会是Textbox1或其他数字。当然,您可以在设计器文件或Visual Studio中的表单编辑器GUI中更改此名称。

因此,可以说,您将现有的TextBox的名称更改为statusBox。现在,你的方法只需是这样的:

void WriteToStatus(string status) 
{ 
    statusBox.Text = status; 
} 
0

好吧,我知道你正在创建文本框的静态方法中一个新的实例。该文本框实例无处不在,一旦执行了静态方法,它就会被销毁。

您可以有:

public static void writetoStatus(TextBox tb, string text) 
    { 
     tb.Text = text; 
    } 

    // and then later use it like: 
    writetoStatus(statusBox, text); 

或者:

public static void writetoStatus(Form frm, string text) 
    { 
     TextBox tb = new TextBox(); 
     tb.Text = text; 
     frm.Controls.Add(tb); 
    } 

    // and then later use it like: 
    writetoStatus(myForm, text);