标签即使显示时也不会显示

时间:2019-02-12 02:00:07

标签: c# winforms

我正在制作一个加载单独表单的应用程序,用户输入信息,然后完成后,它将显示在首先加载该应用程序的主表单上。

问题是,我尝试了多种解决方案来加载此文件,但在放入信息后将无法加载。我尝试过 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();
    }
}

期望: 信息输入后,应将标签加载到表单中。

实际: 它不会显示任何内容。

编辑:由于我对问题的回答不太好,因此在代码和问题中添加了更多内容,对此表示抱歉:/

1 个答案:

答案 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();
    }
}