2016-08-23 34 views
1

我在控制文本框时遇到问题。我需要从Form1.cs的外部更改文本框所在的位置,以查找此代码段。重新加载表单而不是制作新表单/访问文本框

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

这使我在理论上Form1.cs的控制之外的文本框,但来这里的问题,我想访问它每次我创建的,而不是使用旧的和令人耳目一新Form1的一个新实例它。

Form1 frm = new Form1(); 
frm.UpdateText("aaaaaaaaaaaa"); 
frm.Show(); 

我错过了什么?有一个更好的方法吗?我尝试过多种方式来更新新表单,但没有成功。

+4

您应该保留一个创建的第一个窗体的全局变量并在此引用上调用您的方法。 – Aybe

+0

[如何从另一个窗体更改窗体的控件?](http://stackoverflow.com/questions/38768737/how-to-change-a-control-of-a-form-from-another-form) –

回答

1

Bokker的变化,

你必须有奇异Form1中的引用到所有事情都是指。

如果这是一个子窗体,那么就像Aybe评论的那样,创建一个mainform的公共成员并将其命名。

Public Form myForm1; 

你可能有一些事件的,你想Form1的推出...

点击一个按钮,菜单项,工具栏项目等。在这种情况下,你将不得不检查形式存在并根据需要创建。

private SomeEvent() { 
    if (myForm1 == null) 
    { 
     myForm1 = new Form1(); 
     myForm1.Show(this); 
    } 

    myForm1.UpdateText("some text"); 

}

或者,您可以创建窗体的Load事件的形式,只是只要你创建之前尝试的myForm1.UpdateText() 形式如果按照这种模式,你正在创建myForm1作为主窗体的一部分,最佳实践表示您还应该在主窗体关闭事件中处理窗体。

private void MainForm_FormClosing(object sender, FormClosingEventArgs e) 
    { 
    if (myForm1 != null) 
     { 
     myForm1.Close(); 
     myForm1.Dispose(); 
     } 
    } 

这一切都是我的头顶,所以它可能不完美。

+0

这可以在Form1.cs中使用,但在其他cs文件myForm1无法识别时,您能告诉我如何包含它吗?我到处搜索并没有多少运气,谢谢 – BoKKeR

+1

您可能需要向上移动form1的定义。您可能必须使其成为主程序或应用程序对象(如果有)的公共成员。如果移动到您的主程序(假设它称为程序),则必须使用Program.Myform1引用该表单。 –

1

在这种情况下,你可以通过表单的实例的方法作为参数,作出这样

public void UpdateText(string newValue, Form1 frm) 
{ 
    frm.torrent_name0.Text = newValue; 
} 
相关问题