以不同的形式使用相同的元素

本文关键字:元素 | 更新日期: 2023-09-27 18:27:26

我正在做一个注册系统。在这个系统中,我使用模态,当用户单击按钮时显示的另一种形式
要显示表单,我使用:

private void btnShowModal_Click(object sender, EventArgs e)
{
    AddUserForm form = new AddUserForm();
    form.Show();
}

这对显示表单非常有效。现在这是我的问题:如果我在这个表单中创建一个标签,并试图在主表单中使用它作为参考,我会得到一个错误,即它在上下文中不存在。例如,我在AddUserForm中创建了label1。现在我将尝试在Form1中使用相同的标签来更改文本:

label1.Text = "I was created in AddUserForm and now I'm at Form1!";

但这不起作用,我得到错误:

The name 'label1' does not exist in the current context.

如何同时使用两种形式的元素?我需要添加一个参考?怎样提前感谢大家!

以不同的形式使用相同的元素

创建创建标签的基本表单。然后,每个表单都可以从基本表单继承并以这种方式共享。

public class BaseForm : Form
{
  //define label
}

public AddUserForm : BaseForm
{
}

在AddUserForm中,创建以下属性:

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

然后在Form1中,只需在创建AddUserForm实例后添加此行:

form.LabelText = "I was created in AddUserForm and now I'm at Form1!";

更普遍地说,虽然您可以公开该字段(默认情况下它是私有的),但这样做是个坏主意。通过将表单元素封装在属性中,可以精确地控制外部世界可以更改和不能更改的内容。例如,您可能不希望其他类能够更改标签的大小、位置、字体等。或者你可以这样做,但如果是这样,那么你就可以为那些你想改变的东西添加专门的属性。

我想你可以这样尝试,

Form1.cs

private void btnShowModal_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(ref this.label1);
        frm.ShowDialog();
    }

Form2.cs

    Label labelOne = null;
    public Form2()
    {
        InitializeComponent();
    }
    public Form2(ref Label lbl)
    {
        InitializeComponent();
        labelOne = lbl;
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        labelOne.Text = "A";
    }

希望它能解决!