Почему уничтожается созданный в классе объект? В общем пишу на вин форме c# и столкнулся с проблемой вылета программы, сейчас постараюсь объяснить. в основном классе формы создаю ссылку на объект на другой формы, в последствии заполняю в этой другой форме датагрид, данными из первойResult r1 = new Result(); public void test() { for (int i = 0; i < Convert.ToInt32(timeCreditText.Text.ToString()); i++) { try { r1.dataGridView1.Rows.Add(); r1.dataGridView1.Rows[i].Cells[0].Value = (i + 1).ToString(); } catch(Exception e) { MessageBox.Show("error"); } } r1.Show(); } и проблема заключается в том, что когда я закрываю окно 2 формы и нажимаю заново чтобы его открыть и заполнить данными у меня выскакивает исключение, что System.ObjectDisposedException: "Доступ к ликвидированному объекту невозможен." Скрываю ту другую форму так: MainForm.r1.Hide(); и непонятно почему ссылка на объект уничтожается. НО если создавать при нажатии каждый раз новый объект, то все ок, и я этим и воспользовался, но не понятно почему созданный объект другой формы в основном классе основной формы уничтожается при скрытии той другой формы.
В данном случае объект r1 уничтожается потому, что при вызове метода Hide() для формы r1 вызывается метод Dispose(), который освобождает все ресурсы, связанные с объектом формы. После вызова метода Dispose() объект формы уже не может быть использован.
Чтобы это обойти, можно использовать метод ShowDialog() вместо Show() при отображении формы r1. Метод ShowDialog() блокирует основную форму и не позволяет ей продолжать выполнение кода, пока отображенная форма не будет закрыта. Таким образом, при повторном открытии формы r1 будет создан новый объект и не возникнет исключение.
Также можно перенести создание объекта r1 внутрь метода test(), чтобы каждый раз при его вызове создавался новый объект формы.
В данном случае объект r1 уничтожается потому, что при вызове метода Hide() для формы r1 вызывается метод Dispose(), который освобождает все ресурсы, связанные с объектом формы. После вызова метода Dispose() объект формы уже не может быть использован.
Чтобы это обойти, можно использовать метод ShowDialog() вместо Show() при отображении формы r1. Метод ShowDialog() блокирует основную форму и не позволяет ей продолжать выполнение кода, пока отображенная форма не будет закрыта. Таким образом, при повторном открытии формы r1 будет создан новый объект и не возникнет исключение.
Также можно перенести создание объекта r1 внутрь метода test(), чтобы каждый раз при его вызове создавался новый объект формы.