在C#中以另一种forms更改标签的文本?

我有一个名为LabelX1的标签。 这是在form2上。 在form1上,我有一个按钮。 我希望将按钮的文本传输到另一个表单的标签。 我试过了

form2 frm2 = new form2(); frm2.labelX1.Text = this.button1.text; 

但它不起作用。 这样做有简单直接的方法吗?

您需要公开您的标签或其财产。

在表格2中:

 public string LabelText { get { return this.labelX1.Text; } set { this.labelX1.Text = value; } } 

然后你可以这样做:

 form2 frm2 = new form2(); frm2.LabelText = this.button1.text; 

您可以像这样修改Form2的构造函数:

 public Form2(string labelText) { InitializeComponent(); this.labelX1.Text = labelText; } 

然后在文本中创建Form2传递:

 Form2 frm2 = new Form2(this.button1.text); 

在form2中写这个

 public void ChangeLabel(string s) { labelX1.Text = s; } 

然后你在哪里创建表单2执行此操作

 form2 frm2 = new form2(); frm2.ChangeLabel(this.button1.text); 

或者你可以做到这一点>>

 ((Label)frm2.Controls["labelX1"]).Text = "test"; 

你可以将labelX1公开,它可以工作,但有一个更好的方法来做到这一点

http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

这样做有简单直接的方法吗?

最简单的方法是使labelX1成为form2的公共成员。 您遇到的问题是因为Form1代码form2.labelX1不可见。 在form2设计器中,您可以转到labelX1的属性并将其设置为public / internal的可见性。

更好的方法是将labelX1.Text公开为可以在类外部的代码中设置的属性。

我将父窗口属性更改为以下代码:

 this.MdiParent.Controls["label1"].Text = "test"; 
 form2 frm2 = new form2(); ((Label)frm2.Controls["labelX1"]).Text=button1.Text; frm2.Show(); 

如果您需要从代码中的其他位置访问form2(例如按下按钮),您将无法看到您创建的表单的实例。 为了解决这个问题,我创建了一个公共实例来保存对它的引用,如:

  public form2 form2_pub; 

然后在创建它之后,将新的一个分配给您的公共实例:

 form2 frm2 = new form2(); frm2.Show(); form2_pub = frm2 

现在,您可以在整个例程中引用form2_pub。

至少对我有用。

请记住,在您的setter中,您可以运行您想要的任何其他代码。 例如,我通过将show_scanning设置为true,使用以下内容在另一个表单上显示我想要的内容:

  public bool show_scanning //turns on the scanning screen { set { scanning_pnl.Visible = true; notReady_pnl.Visible = false; timer1.Enabled = true; } } 

你有例外吗? 您可以在form2上创建公共属性,使用setter在标签上设置文本,或者将labex1访问修饰符设置为public并直接设置它。 它应该工作。