Как вызвать основную программу из открытой ею winform? - PullRequest
2 голосов
/ 05 ноября 2008

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

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

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

Ответы [ 3 ]

2 голосов
/ 05 ноября 2008

В конструкторе для другой формы добавьте ссылку на основную форму. Затем сделайте общедоступным / внутренним все, что вам нужно для доступа к главной форме.

Form m_mainForm;
public OtherForm(Form mainForm)
{
    m_mainForm = mainForm;
}

Edit:

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

Конечно, ваше решение работает, и только вы знаете, что будет работать лучше всего в вашем дизайне.

2 голосов
/ 05 ноября 2008

Самый простой способ - переопределить конструктор, например, OtherForm newForm=new OtherForm(string title, int data);. Это также работает для ссылочных типов (это был бы простой способ отправить данные обратно).

0 голосов
/ 05 ноября 2008

Я думаю, что нашел ответ здесь: 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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...