Member 11920272 Ответов: 2

Как получить одно и то же значение из одной формы в другую две разные формы


У меня есть 2 формы новконтакт и новконтакт1 кто должен получить такую же ценность от типналис форма,
когда одна форма контакта работает идеально, но когда добавить второй есть ошибка

System.NullReferenceException: 'Object reference not set to an instance of an object.'


Что я уже пробовал:

это мой код от tipNaLice
novKontakt orForm;
novKontakt1 or1Form;

public tipNaLice(novKontakt inForm)
{
    orForm = inForm;
    InitializeComponent();
}

public tipNaLice(novKontakt1 in1Form)
{
    or1Form = in1Form;
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
     foreach (object redovi in listBox1.SelectedItems)
     {
        orForm.textLice = redovi.ToString();
        orForm.vmetniTipNaLice();
        or1Form.textLice1 = redovi.ToString();
        or1Form.vmetniTipNaLice1();

        this.Close();
     }

}

2 Ответов

Рейтинг:
7

Member 11920272

Когда новконтакт1 форма открыта сделайте что-нибудь (в моем случае отправьте значение из списка)
так что это мое решение

public static Form OpenForm(Type FormType)
        {
            foreach (Form OpenForm in Application.OpenForms)
            {
                if (OpenForm.GetType() == FormType)
                    return OpenForm;
            }

            return null;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            novKontakt1 nk1 = null;
            
            foreach (object redovi in listBox1.SelectedItems)
            {
                if ((nk1 = (novKontakt1)OpenForm(typeof(novKontakt1))) == null)
                {
                    orForm.textLice = redovi.ToString();
                    orForm.vmetniTipNaLice();
                }
                else
                {
                    or1Form.textLice1 = redovi.ToString();
                    or1Form.vmetniTipNaLice1();
                }
                this.Close();
            }
        }


Рейтинг:
2

OriginalGriff

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

Как именно, зависит от "отношения" между этими двумя формами.
Взгляните на них, один из них будет соответствовать вашим обстоятельствам.
Форма, которая создает экземпляр другого:

MyForm mf = new MyForm();
mf.Show();
Это "родитель", другая форма - "Ребенок".
(Это не подразумевает никаких формальных отношений MDI)

Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[^]


Member 11920272

я знаю это.

 tipNaLice frm = new tipNaLice(this);
      frm.Show();


когда это одна работа
private void button1_Click(object sender, EventArgs e)
{
     foreach (object redovi in listBox1.SelectedItems)
     {
        orForm.textLice = redovi.ToString();
        orForm.vmetniTipNaLice();
        
        this.Close();
     }
}


я смотрю ваш код и не понимаю хорошо,
мне нравится более простое решение, мне нравится одно

OriginalGriff

Проблема в том, что это плохое решение: это означает, что общие элементы управления должны быть осведомлены друг о друге и их внутренней работе. Это означает, что теперь вы не можете изменить ни то, ни другое, не рассматривая, как это может повлиять на внешний мир; это означает, что вы не можете вносить изменения в форму, содержащую их, не зная интимных деталей того, как они работают. И это означает, что вы не можете повторно использовать элементы управления в других местах.

Все это просто сделать "правильно" - просто посмотрите на код в ссылках, которые я вам дал, это все довольно простые вещи.
Обнародование элементов управления - это очень плохая идея, которая вернется, чтобы укусить вас позже, когда она была использована так много, что ее исправление становится чрезвычайно трудным и утомительным.