Как вызвать основную программу из открытого им winform'а?

У меня есть программа, которая при запуске открывает winform (это та, которая указана в Application.Run (new ...). Из этой формы я открываю другую форму:

OtherForm newForm=new OtherForm();
newForm.Show();

Как я могу общаться из новой формы winform с формой, которая ее открыла? Так что я могу добавить в него несколько предметов.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
512
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Самый простой способ - переопределить конструктор, например 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);

}

Другие вопросы по теме