Если я скрою форму, она существует в Application.OpenForms?
Нет, к сожалению, если вы Hide
форму, он не будет присутствовать в Application.OpenForms
Так как я могу открыть невидимую форму? Также я хочу, чтобы он существовал в Application.OpenForms.
Если вы хотите открыть невидимую форму, и вы хотите, хотите, чтобы она существует в Application.OpenForms, вы можете использовать этот код вместо просто Show()
:
var f = new MailSynchronize();
f.Opacity = 0;
f.ShowInTaskbar = false;
f.Show();
Как найти эту форму еще раз?
Чтобы получить открытый экземпляр формы вы можете использовать Application.OfType<MailSynchronize>()
var f= Application.OpenForms.OfType<MailSynchronize>()
.FirstOrDefault();
Когда я нашел его, как показать его снова?
f.Opacity = 1;
f.ShowInTaskbar = true;
f.Show();
Как скрыть его снова?
Вы не должны вызывать Hide()
, чтобы скрыть форму, потому что это делает форму, чтобы выйти из Application.OpenForms
, вместо этого вы должны использовать этот путь:
f.Opacity = 0;
f.ShowInTaskbar = false;
Есть ли другой способ?
Да, к примеру, вы можете создать статическое свойство в классе, например, в Program.cs
таким образом:
public static MailSynchronize MailSynchronizeInstance { get; set; }
и первый раз, когда вы хотите, чтобы открыть форму, вы можете присвоить экземпляр это свойство, а затем вы можете использовать его с помощью Program.MailSynchronizeInstance, чтобы показать или скрыть, и вам не нужно искать в Application.OpenForms
или выполнить обходное решение.
Также вы можете сделать это свойство в одностороннем порядке.
Если вам нужен только один экземпляр этой формы, вам может потребоваться использовать «Singleton». – kevintjuh93
Не стоит писать ответ: сохранить экземпляр 'mfrm', сделать его полем доступным через свойство и использовать это свойство вместо перечисления' Application.OpenForms'. – Sinatr