Вы можете использовать другой подход, если хотите.
- Использование System.Action (здесь вы просто передаете функцию основных форм в качестве параметра дочерней форме, например функции обратного вызова)
- Метод OpenForms (Вы вызываете одну из ваших открытых форм)
Использование System.Action
Вы можете думать об этом как о функции обратного вызова, передаваемой дочерней форме.
// -------- IN THE MAIN FORM --------
// CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS
Options frmOptions = new Options(UpdateSettings);
frmOptions.Show();
// YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED
public void UpdateSettings(string data)
{
// DO YOUR STUFF HERE
}
// -------- IN THE CHILD FORM --------
Action<string> UpdateSettings = null;
// IN THE CHILD FORMS CONSTRUCTOR
public Options(Action<string> UpdateSettings)
{
InitializeComponent();
this.UpdateSettings = UpdateSettings;
}
private void btnUpdate_Click(object sender, EventArgs e)
{
// CALLING THE CALLBACK FUNCTION
if (UpdateSettings != null)
UpdateSettings("some data");
}
Метод OpenForms
Этот метод прост ( 2 строки ). Но работает только с открытыми формами.
Все, что вам нужно сделать, это добавить эти две строки, где бы вы ни хотели передать некоторые данные.
Main frmMain = (Main)Application.OpenForms["Main"];
frmMain.UpdateSettings("Some data");
Я предоставил свой ответ на аналогичный вопрос здесь