Ярлык не будет отображаться, даже если указано показать - PullRequest
0 голосов
/ 12 февраля 2019

Я делаю приложение, которое загружает отдельную форму, пользователь вводит информацию, а затем, когда это будет сделано, оно будет отображаться в основной форме, в которую приложение загружено первым.

Проблема в том, что я пробовал несколько решений, чтобы загрузить это, но оно не загружается после ввода информации. Я пробовал this.Controls.Add (Label); , что я видел больше всего, но это не сработало.Другой способ, которым я пытался, был 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 ()

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 голосов
/ 13 февраля 2019

Пример того, что я описал в комментариях:

Когда вы делаете это:

Phonebook PB = new Phonebook();

вы создаете новый экземпляр класса PhoneBook(ваша форма): это не тот экземпляр формы (тот же объект), который создал форму MakeContact и тот, который вы пытаетесь обновить. Это другой объект .
Какое бы изменение вы ни делали в этом новом объекте, оно не будет отражено в исходном, существующем.

Как решить :
Добавить конструктор в MakeContact форму, которая принимает аргумент типа PhoneBookи закрытый объект типа Phonebook:

    private PhoneBook pBook = null;

    public MakeContact() : this(null) { }
    public MakeContact(PhoneBook phoneBook)
    {
        InitializeComponent();
        this.pBook = phoneBook;
    }

Назначьте аргумент, передаваемый в конструкторе, закрытому полю того же типа.Затем это поле будет использоваться для вызова методов Public класса PhoneBook (форма - это класс, похожий по поведению на другой класс).

Это не единственный возможный метод.Вы можете увидеть другие примеры здесь .

Полный пример кода:

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...