Почему поле во втором методе равно null, когда я в первом создал экземпляр класса

    FTP ftp;
    public void ConnectFTP(string ip)
    {
        ftp = new FTP(ip);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ftp.ConnectionFTPAsync();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        Form2 form = new Form2();
        form.ShowDialog();
        if (form.DialogResult == DialogResult.OK)
        {
            form.Close();
        }
        else
        {
            Application.Exit();
        }
    }

в методе button1_Click поле ftp = null. Не могу понять почему. ConnectFTP выполняется до button1_Click (он вызывается с другой формы перед ее закрытием). Если переместить ftp.ConnectionFTPAsync(); в ConnectFTP, то все будет хорошо.

код 2 формы:

            if (textBox1.Text != "")
        {
            if (textBox2.Text != null && textBox3.Text != "")
            {
                String ip, login, password;
                login = textBox2.Text;
                password = textBox3.Text;
                ip = textBox1.Text;
                ip = "ftp://192.168.0.105";
                Form1 form = new Form1();
                form.ConnectFTP(ip);
                this.DialogResult = DialogResult.OK;
            }
        }

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

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

Самое простое для вас:

1) Измените конструктор второй формы вот так

private Form1 _form1;

public Form2(Form1 form) 
{
    _form1 = form;
}

2) Вызывайте второе окно вот так

Form2 form = new Form2(this);
form.ShowDialog();

3) а обращайтесь к методу вот так

_form1.ConnectFTP(ip);

При этом обязательно уберите вот эту строчку

//Form1 form = new Form1();

Еще Application.Exit() можно просто заменить на Close()

→ Ссылка