【问题标题】:Accessing controls on a new form访问新表单上的控件
【发布时间】:2009-02-10 17:20:33
【问题描述】:

我的项目中有 2 个表单,form1 和 form2。当我单击 form1 中的按钮时,我运行以下代码:

Form tempform = new Form2();
tempform.Show();

在我的 Form2 代码中,我现在需要更改文本的标签。 如何访问标签?

我试过了:

tempform.label1.value = "new text"

这不起作用,我什至尝试使用 Controls 集合进行访问,但我认为我搞砸了。有什么办法可以访问标签吗?或者有什么方法可以将值传递给该新表单,然后让该表单更改标签文本。

谢谢

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    如果标签值只应设置一次,则在创建表单时,请使用 Form2 的构造函数,如下所示:

    public Form2(string labelValue)
    {
      _labelValue = labelValue;
    }
    

    然后在创建表单时调用该构造函数。

    或者,如果标签在表单的生命周期内发生变化,则创建一个公共属性:

    public string LabelValue
    {
      get { return label1.Text; }
      set { label1.Text = value; }
    }
    

    我还建议命名参数和/或属性以反映值的含义,例如“titleText”而不是“labelValue”。这样,Form2 可以决定如何显示信息(在标题栏、标签、文本框等),而 Form1 不必担心这些。

    编辑:像这样使用 LabelValue 属性:

    Form2 newForm = new Form2(); // Assign object to a Form2 instead of Form
    newForm.LabelValue = "new text";
    newForm.Show();
    

    【讨论】:

    • 我试过这样做,这就是我得到的:错误 1 ​​'System.Windows.Forms.Form' 不包含 'LabelValue' 的定义,并且没有扩展方法 'LabelValue' 接受第一个参数可以找到“System.Windows.Forms.Form”类型的
    • 您将 Form2 对象作为表单引用。 Form 类型不会定义新方法。您必须创建一个 Form2 变量。我在答案中添加了一个示例。
    • 如果您通过Form2的构造函数参数分配字段值,那么您可以保留您的newForm作为Form引用。
    • 我使用构造函数来传递参数。我确实尝试了这些属性,并且按照您的说明做了,但是没有用:(
    • 哦,等等,我没有按你说的做。我创建了一个通用表单而不是 Form2。对不起对不起我看错了谢谢:))
    【解决方案2】:

    默认情况下,控件具有protected 访问权限。您可以将其更改为public,或者您可以向您的 form2 类添加一个方法/属性来设置标签并调用它(通常首选后一种方法来保留封装,因为设计人员可能想要覆盖您的公共更改。) .

    【讨论】:

    • 我添加了这个方法: public void SetLabelValue(string valor) { label1.Text = valor;并得到了这个错误:“System.Windows.Forms.Form”不包含“SetLabelValue”的定义并且没有扩展方法
    • 确保将函数添加到正确的表单中,以正确的方式调用它,并且在form1中使用之前重新编译了form2
    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多