system.StackOverflowException: "Выдано исключение типа "System.StackOverflowException"." c#

У меня есть Form1 в которой я создаю Form2

public partial class Form1 : Form
    {
        Form2 form2 = new Form2();

, затем в Form2 я создаю Form3

public partial class Form2 : Form
{
    Form3 form3 = new Form3();

и в форме Form3 мне нужно обратиться к объекту на Form1. Если я в Form3 создам Form1 то уйду в рекурсию. Как обратиться из Form3 к Form1 не создавая Form1, а обратиться к уже существующей?


Ответы (1 шт):

Автор решения: aepot

new Form1 не позволит вам ни к чему обратиться, а создаст новую копию формы и будет у вас 2 Form1, в свою очередь 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, 1 форма создаст 2, 2 создаст 3, 3 создаст 1, StackOverflowException

Для главной формы можно например так

private Form1 mainForm;

private void Form3_Load(object sender, EventArgs e)
{
    mainForm = Application.OpenForms.OfType<Form1>().First();
}

Чтобы создать обоаботчик Load, надо в дизайнере ткнуть по пустому месту на форме двойным кликом.

→ Ссылка