Как закрыть форму вызывающего окна из библиотеки/файла классов? Нужно получить доступ к форме вызова и выполнить .close()

У меня есть 3 формы в моем проекте winforms, и все они имеют кнопку, которая запускает один и тот же код открытия Form2. Мне нужно централизовать код, поместив этот код в файл класса внутри того же проекта или поместив его в отдельную библиотеку классов. Прямо сейчас код находится внутри той же формы, что и ниже:

frm1 entryform = (frm1)Application.OpenForms["frm1"];

if (entryform == null)
{
    entryform = new frmMainMenu();
}
entryform.StartPosition = FormStartPosition.Manual;
entryform.Location = this.Location;
entryform.Show();

this.close();

Когда я перемещаю этот код из Form1, Form2, Form3 в общую форму, я не могу получить доступ к вызывающей форме, чтобы заменить строку this.close(); Есть ли такое свойство, как Method.CallingForm.Close() или что-то в С#? Пожалуйста помоги

Я не хочу передавать форму как параметр. Форма слишком тяжелая, чтобы ее передать. Любая другая альтернатива?


person Enggr    schedule 26.04.2012    source источник
comment
Я не хочу передавать форму как параметр. Форма слишком тяжелая, чтобы ее передать. Любая другая альтернатива?   -  person Enggr    schedule 27.04.2012
comment
Это действительно плохая идея. Тривиально решите свою проблему, заставив форму вызывать свой собственный метод Close() вместо вызова.   -  person Hans Passant    schedule 27.04.2012
comment
@Enggr: Независимо от того, насколько heavy вы думаете о своей форме, передать ее тривиально. По сути, вы передаете ссылку на объект. То, что вы ДЕЛАЕТЕ с формой после того, как передадите ее по кругу, может заставить вас думать о ней как о тяжелой. Следуйте совету Хана и измените логику так, чтобы каждая форма отвечала за самозакрытие.   -  person Raheel Khan    schedule 12.04.2015


Ответы (2)


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

Форма является эталонным типом и не приведет к ухудшению производительности.

Если вы хотите рассмотреть лучшие практики, ваш центральный класс должен запускать событие, когда ему нужно закрыть форму.

person Raheel Khan    schedule 27.04.2012

Передайте форму в качестве параметра.

Форма НЕ сложная для передачи, потому что все, что вы когда-либо передаете, - это ссылка на форму, а не на всю форму.

person Derek Tomes    schedule 27.04.2012