c#-使用不同形式的相同元素
我正在做一个注册系统。在这个系统中,我使用了一种模式,即当用户单击按钮时显示的另一种形式。c#-使用不同形式的相同元素,c#,.net,winforms,forms,visual-studio-2013,C#,.net,Winforms,Forms,Visual Studio 2013,我正在做一个注册系统。在这个系统中,我使用了一种模式,即当用户单击按钮时显示的另一种形式。 为了显示表单,我使用: private void btnShowModal_Click(object sender, EventArgs e) { AddUserForm form = new AddUserForm(); form.Show(); } 这非常适合显示表单。现在这就是我的问题:如果我在这个表单中创建一个标签,并尝试在主表单中使用它作为引用,我会得到一个错误,即它在上下文中
为了显示表单,我使用:
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!";
更一般地说,虽然您可以公开该字段(默认情况下它是私有的),但这样做是个坏主意。在属性中包装表单元素可以让您精确地控制外部世界可以和不能更改的内容。例如,您可能不希望其他类能够更改标签的大小、位置、字体等。或者你可以这样做,但是如果是这样的话,那么你可以为那些你想改变的东西添加属性。我想你可以这样尝试 表格1.cs
private void btnShowModal_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(ref this.label1);
frm.ShowDialog();
}
表格2.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";
}
希望它能解决 我正在尝试:
namespace Form1{public class AddUserForm:Form1{public AddUserForm(){InitializeComponent();}}}}
但这不起作用,来自Form1的元素不能被AddUserForm识别,反之亦然。这不起作用。我无法添加对第一个表单元素的引用?我将使用它来注册用户,我需要从表格1中的列表中获得一些信息。如果您比“这不起作用”更具体,那么可以详细说明答案,以处理您遇到的任何具体问题。一旦每个对象都有对另一个对象的引用,就可以轻松地将数据从一个对象传递到另一个对象。但重要的是要保留封装
,并确保私有数据对每个对象都是私有的。在这种情况下,使用上面的属性是控制访问的一种好方法,只要您正确使用该技术,它就会起作用。如果我在AddUserForm上使用它,我可以从Form1获取数据,但反之亦然。例如,这在Form1中:publicsstringlabelref{get{return label1.Text;}设置{label1.Text=value;}
this在AddUserForm中:Form1 principalform=newform1();principalform.label1=“我是在Form1中创建的,只需单击AddUserForm中的按钮即可将文本更改为该格式”
,对于AddUserForm,此操作有效,但对于Form1则无效。如果在Form1中定义的属性名为labelREF
,则需要使用的属性名为labelREF
,不像你说的那样使用标签1。再说一次,当你写了一些不起作用的东西时,你需要具体一点。它怎么不起作用?你收到了什么错误消息(如果有的话)?我不能比这更具体,因为我没有错误消息!这不适用于主窗体,但适用于AddUserForm,我不理解这一点。我正在用Form1处理AddUserForm,但对于这一点,标签的文本不会改变。我使用的是principalform.labelREF=“Text”
我的代码编译得很好,但当我单击按钮显示文本时,什么也没有发生。