【问题标题】:Changing a label's text in another form in C#?在 C# 中以另一种形式更改标签的文本?
【发布时间】:2012-05-22 14:23:19
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不起作用?会发生什么?
  • 你有form2的实例已经显示了吗?通过这种方式,您可以创建 form2 的另一个实例并在那里设置标签文本。并且该实例不会显示(例如 Show() / ShowDialog())
  • 这是个玩笑的问题吗(看你的名声就迷惑了)?
  • 请记住,他可能没有 C# Winforms 经验。
  • 嗯,我 15 岁,我正在学习

标签: c# winforms


【解决方案1】:

您需要公开您的标签或其属性。

在表格 2 中:

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

那么你可以这样做:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您的答案仍然不正确 受保护的可见性无济于事
    • 是的,我不小心写了受保护的,我的意思是公开的...当你发表评论时我正在编辑!
    【解决方案3】:

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

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

    然后创建Form2传入文本:

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

    【讨论】:

    • 我同意这会起作用,但这将是一次性更改。也许这对 OP 来说已经足够了。
    • @K'Leg 好吧,他们没有说明是否需要再次更改...我只是提供选项。
    • 我同意,如果这就是他想要的,那么我认为这是最好的答案。为文本标签创建属性更容易。
    【解决方案4】:

    或者你可以这样做>>

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

    【讨论】:

      【解决方案5】:
      form2 frm2 = new form2();
      ((Label)frm2.Controls["labelX1"]).Text=button1.Text;
      frm2.Show();
      

      【讨论】:

        【解决方案6】:

        唯一需要做的就是将其他表单的标签设为公开

        例如: 表格1:

         public System.Windows.Forms.Label txtInfo;
        

        然后在Form2中

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

        【讨论】:

          【解决方案7】:

          在form2里面写这个

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

          然后在您创建表单 2 的地方执行此操作

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

          【讨论】:

            【解决方案8】:

            您可以将labelX1 公开,它会起作用,但有更好的方法来做到这一点:

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                【解决方案10】:

                如果您需要从代码中的其他位置访问 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;
                        }
                    }
                

                【讨论】:

                  【解决方案11】:

                  通常控制器是私有的。这就是为什么您无法从其他表单访问它的原因。上面提到的通过参数传递数据等方式非常正确。还有一种方法, 转到您的表单 Form2.Designer.cs

                  private System.Windows.Forms.Label labelX1;
                  

                  将“私人”更改为“公共”。 现在 labelX1 对外可见。

                  【讨论】:

                    【解决方案12】:

                    另一种方法是 只需将 label 或 text 的修饰符属性更改为 public,现在它允许访问 form1 文本框的内容以在另一个表单上添加标签

                    所以代码是

                    private void button1_click(){
                        Form2 obj1 =new Form2();
                        Obj1.show();
                        Obj1.label1.text="welcome"+textbox1.Text;
                    }
                    

                    【讨论】:

                      【解决方案13】:

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

                      【讨论】:

                      • @Killercam 错误对谁来说很清楚?他没有发布任何错误信息。
                      • 如果您没有足够的信息来回答评论,请询问详细信息。你提供的不是答案。
                      • 对某些人来说确实如此。您从道具箱设置访问修饰符,而不是代码。但是 nvm。
                      猜你喜欢
                      • 2022-08-15
                      • 2019-02-14
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-11-30
                      • 2012-03-11
                      相关资源
                      最近更新 更多