【问题标题】:How to make click button to change label text in other form?如何制作单击按钮以更改其他形式的标签文本?
【发布时间】:2017-08-17 16:42:25
【问题描述】:

如何做到这一点,当我单击 Form1(主窗体)中的按钮时,它会打开 Form2,同时还会更改标签的文本(Label4)。

我当前的按钮代码:

Admin objFrmAdmin = new Admin();
this.Hide();
objFrmAdmin.Show();

我不想更改表单的显示代码,我只想添加它,因此当我单击按钮打开该表单时,它也会更改 Form2 中标签上的文本。

【问题讨论】:

  • 您是否尝试过使用 form.button1.label = value 访问表单控件
  • 是的,但由于某种原因无法从 Form1 代码中找到 Form2 上的任何控件。
  • OK - 需要将控件设为公开。

标签: c#


【解决方案1】:

更改Admin 表单构造函数,如下所示:

//add parameter text
public Admin(string text)
{
    InitializeComponent();
    //change label 4 text
    this.Label4.Text = text;
}

改变你初始化Admin表单的方式,如下所示:

Admin objFrmAdmin = new Admin("text to show on label");
this.Hide();
objFrmAdmin.Show();

编辑:实现这一目标的另一种方法是在管理表单上创建公共方法并调用它。所以,让构造函数不带参数,就像以前一样,在 Admin 表单上创建公共方法,如下所示:

public void ChangeText(string text)
{
    this.Label4.Text = text;
    //put other code here if needed, ie. hide buttons or something like that
}

现在,只需在初始化 Admin 表单后调用该方法即可。

Admin objFrmAdmin = new Admin();
this.Hide();
objFrmAdmin.ChangeText("text to show");
objFrmAdmin.Show();

【讨论】:

    【解决方案2】:

    您使用对象层次结构直接更改标签。

    Admin objFrmAdmin = new Admin();
    this.Hide();
    objFrmAdmin.lblLabelToChange.Text = "Your Test Here";  //<= this line.
    objFrmAdmin.Show();
    

    如果标签没有出现在智能感知中,那么您可能需要将其公开。另一种方法是使用构造函数,并通过新的测试:

    //Constructor for Admin form
    public Admin(string newLabelText)
    {
        this.lblLabelToChange.Text = newLabelText;
    }
    

    通过以下方式调用它:

    Admin objFrmAdmin = new Admin("The new text");
    

    【讨论】:

    • 虽然您的第一个建议将解决 OP 的问题,但通常不推荐不推荐控制 public,因为一个表单是由另一个表单控制的。这会导致混乱、更高的可维护性等。
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多