У меня есть программа, которая при запуске открывает winform (это та, которая указана в Application.Run (new ...). Из этой формы я открываю другую форму:
OtherForm newForm=new OtherForm();
newForm.Show();
Как я могу общаться из новой формы winform с формой, которая ее открыла? Так что я могу добавить в него несколько предметов.





Самый простой способ - переопределить конструктор, например OtherForm newForm=new OtherForm(string title, int data);. Это также работает для ссылочных типов (что было бы простым способом отправить данные обратно).
В конструкторе другой формы добавьте ссылку на вашу основную форму. Затем сделайте общедоступным / внутренним все в основной форме, к которому вам нужно получить доступ.
Form m_mainForm;
public OtherForm(Form mainForm)
{
m_mainForm = mainForm;
}
Редактировать:
В ответ на ваш второй пост - вы также можете рассмотреть возможность раскрытия необходимых значений, необходимых для создания вашего предмета. Например, если вам нужны имя и фамилия для создания нового элемента «человек», вы можете раскрыть их как свойства в диалоговом окне. Это помогло бы немного отключить его и сделать его немного более универсальным.
Конечно, ваше решение тоже работает, и только вы знаете, что лучше всего подойдет для вашего дизайна.
Думаю, я нашел здесь ответ: http://www.c-sharpcorner.com/UploadFile/mosessaur/winformsdelegates09042006094826AM/winformsdelegates.aspx
Я должен использовать делегатов. Во второй форме я определяю:
public delegate void AddItemDelegate(string item);
public AddItemDelegate AddItemCallback;
И из открывшейся формы пишу:
private void btnScenario2_Click(object sender, EventArgs e)
{
FrmDialog dlg = new FrmDialog();
//Subscribe this form for callback
dlg.AddItemCallback = new AddItemDelegate(this.AddItemCallbackFn);
dlg.ShowDialog();
}
private void AddItemCallbackFn(string item)
{
lstBx.Items.Add(item);
}