c# - 以不同的形式使用相同的元素

时间:2014-10-22 01:08:11

标签: c# .net winforms forms visual-studio-2013

我在做注册系统。在这个系统中,我使用一个模态,另一种形式,当用户点击一个按钮时显示 为了显示表格,我使用:

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.

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

3 个答案:

答案 0 :(得分:1)

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

public class BaseForm : Form
{
  //define label

}


public AddUserForm : BaseForm
{
}

答案 1 :(得分:0)

在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!";

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

答案 2 :(得分:0)

我想你可以这样试试,

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";
    }

希望它能解决!