在C#中更改另一个窗体标签的文本?

20

我有一个名为LabelX1的标签,它位于form2上。在form1上,我有一个按钮。我想将按钮的文本传输到另一个表单的标签上。我已经尝试过了

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

但它不起作用。有没有一种简单、直接的方法来做到这一点?


4
为什么它不起作用?发生了什么事情? - SLaks
2
你已经显示了form2的实例吗?如果是这样,你可以创建另一个form2的实例并在那里设置标签文本。而且那个实例从来没有被显示过(例如:Show() / ShowDialog())。 - Steve
13个回答

34
你需要公开你的标签或其属性。
在表单2中:
public string LabelText
{
    get
    {
        return this.labelX1.Text;
    }
    set
    {
        this.labelX1.Text = value;
    }
}

那么你可以这样做:

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

9
您可以像这样修改Form2的构造函数:
public Form2(string labelText)
{
    InitializeComponent();
    this.labelX1.Text = labelText;
}

然后创建Form2,传入文本:

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

我同意这个方法可以解决问题,但这只是一次性的更改。或许对于提问者来说这已经足够了。 - General Grey
@K'Leg 嗯,他们没有说明是否需要再次更改...我只是提供选项。 - Eric Dahlvang
如果他只需要这个,我同意这是最好的答案。这比为文本标签创建一个属性更容易。 - General Grey

6

或者你可以这样做 >>

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

5

在form2内写入以下内容

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

那么在创建 Form 2 的地方,执行以下操作:

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

3

有没有一种简单、直接的方法来做到这一点?

最简单的方法是将labelX1作为form2的公共成员。你遇到的问题是因为从Form1代码中无法看到form2.labelX1。在form2设计师中,您可以进入labelX1的属性并将其可见性设置为public/internal。

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


1
你的答案仍然不正确,将可见性更改为protected也无济于事。 - Micah Armantrout
是的,我不小心写成了protected,我真正想要的是public... 我在你评论的时候正在编辑! - hawk

1
form2 frm2 = new form2();
((Label)frm2.Controls["labelX1"]).Text=button1.Text;
frm2.Show();

1

1

你需要做的唯一一件事就是将另一个表单的标签设置为公共。

例如: Form1:

 public System.Windows.Forms.Label txtInfo;

然后在Form2中

Form1 frm =new Form1();
frm.txtInfo.text="....."//you have access because is public

0

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

this.MdiParent.Controls["label1"].Text = "test";

0
如果你需要从代码的其他地方访问form2(比如按钮按下事件),你将无法看到你创建的form实例。为了解决这个问题,我创建了一个公共实例来保存对它的引用,像这样:
 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;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接