我正在制作一个加载单独表单的应用程序,用户输入信息,然后完成后,它将显示在首先加载该应用程序的主表单上。
问题是,我尝试了多种解决方案来加载此文件,但在放入信息后将无法加载。我尝试过 this.Controls.Add(Label); < / em> ,这是我最常看到的,但是没有用。我尝试的另一种方法是执行 Label.Show(); ,但结果相同,但没有任何显示。下面的 AddContacts(字符串名称) 方法是我添加联系人的方式
AddContact_Click(对象发送者,EventArgs e) 方法是一个按钮,当按下该按钮时,它会打开另一种允许插入信息的表格。
public partial class Phonebook : Form
{
public Phonebook()
{
InitializeComponent();
MaximumSize = new Size(633, 306);
}
private void AddContact_Click(object sender, EventArgs e)
{
MakeContact MC = new MakeContact();
MC.Show();
}
public void AddContacts(string Name)
{
Label name = new Label();
//Added Style and Location of Label...
name.Text = Name;
name.Location = new Point(98, 13);
name.Font = new Font("Microsoft Sans Serif", 13, FontStyle.Bold);
this.Controls.Add(name);
Refresh();
}
}
下面是按下“完成”按钮时我使用的方法,当用户完成信息处理后,然后调用 AddContacts() 方法< / p>
public partial class MakeContact : Form
{
public MakeContact()
{
InitializeComponent();
MaximumSize = new Size(394, 377);
}
private void FinishContact_Click(object sender, EventArgs e)
{
//FullName is the name of the TextField when asking for a name
string Name = FullName.Text;
Phonebook PB = new Phonebook();
PB.AddContacts(Name);
//Closes Separate Form and goes back to the
Close();
}
}
期望: 信息输入后,应将标签加载到表单中。
实际: 它不会显示任何内容。
编辑:由于我对问题的回答不太好,因此在代码和问题中添加了更多内容,对此表示抱歉:/
答案 0 :(得分:1)
我在评论中描述的示例:
执行此操作时:
Phonebook PB = new Phonebook();
您创建PhoneBook
类(您的表单)的新实例:这与创建MakeContact
表单的Form实例(相同的对象)不同,您要更新的那个。 这是另一个对象。
无论您对此新对象进行任何更改,都不会反映在原始的现有对象中。
如何解决:
将构造函数添加到 MakeContact
形式中,该形式接受a类型为 PhoneBook
的参数和类型为Phonebook
的私有对象:< / p>
private PhoneBook pBook = null;
public MakeContact() : this(null) { }
public MakeContact(PhoneBook phoneBook)
{
InitializeComponent();
this.pBook = phoneBook;
}
将在构造函数中传递的参数分配给相同类型的私有字段。然后,该字段将用于调用PhoneBook
类的公共方法(一个Form是一个类,其行为与其他类相似)。
这不是唯一可能的方法。您可以看到other examples here。
完整的示例代码:
public partial class Phonebook : Form
{
private void AddContact_Click(object sender, EventArgs e)
{
MakeContact MC = new MakeContact(this);
MC.Show();
}
public void AddContacts(string Name)
{
Label name = new Label();
// (...)
this.Controls.Add(name);
}
}
public partial class MakeContact : Form
{
private PhoneBook pBook = null;
public MakeContact() : this(null) { }
public MakeContact(PhoneBook phoneBook)
{
InitializeComponent();
this.pBook = phoneBook;
}
private void FinishContact_Click(object sender, EventArgs e)
{
string Name = FullName.Text;
this.pBook?.AddContacts(Name);
this.Close();
}
}