2015-10-13 4 views
0

Я хочу получить форму, которая открыта, но скрыта. Я пробовал это. Я получаю форму, но в этом случае показываю форму и скрываю ее в пределах доли секунды. Если я пропущу mfrm.Show(), я не получаю форму MailSynchronize в Application.OpenForms.Как получить форму, когда она не видна?

MailSynchronize mfrm = new MailSynchronize(); 
mfrm.Show(); 
mfrm.Hide(); 

Я получаю форму следующим методом.

foreach (Form f in Application.OpenForms) //it will return all the open forms 
{ 
    if (f.Name == "MailSynchronize") 
    { 
      mfrm = (MailSynchronize)f; 
      break; 
    } 
} 

Может кто-нибудь пожалуйста, предложите мне, как получить открытую форму, которая скрыта по умолчанию, и я могу получить в Application.OpenForms?

+1

Если вам нужен только один экземпляр этой формы, вам может потребоваться использовать «Singleton». – kevintjuh93

+1

Не стоит писать ответ: сохранить экземпляр 'mfrm', сделать его полем доступным через свойство и использовать это свойство вместо перечисления' Application.OpenForms'. – Sinatr

ответ

0

использование f.Visible (возвращаемый тип BOOL)

, если она возвращает ложь, это означает, что форма скрыта. Если он возвращает true, то форма видна.

1

EDIT

Это должно работать для вашего конкретного случая в настоящее время:

this.Opacity = 0; 
this.ShowInTaskbar = false; 

При добавлении этих 2 codelines в вашем MailSynchronize конструктор форма начнет минимизирована, но не будет отображаться на панели задач, который по сути является тем эффектом, который вы искали. Также теперь будет отображаться форма в вашей коллекции Application.OpenForms.

+0

Я пробовал, но тот же результат, что и выше. Сначала он показывает форму, а затем скрывает форму. В этом случае пользователь может легко определить, что форма открыта, а затем скрыта. –

+0

Я отредактировал свой ответ, второй ответ должен помочь вам сейчас. – Huntt

+0

Не могли бы вы рассказать мне, как и где я должен использовать этот метод переопределения? –

1

Если я скрою форму, она существует в 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 или выполнить обходное решение.

Также вы можете сделать это свойство в одностороннем порядке.

+0

Я не получаю форму. Я получаю, если я использую «MailSynchronize mfrm = new MailSynchronize(); mfrm.Show(); mfrm.Hide() ;. Пожалуйста, предложите мне открыть форму. –

+0

@NJBhanushali Проверьте обновления и описания. Я думаю, что ответ содержит вам нужно. –

+0

Aghaie работает отлично в первый раз. Не знаю, почему, но я не получаю форму в Application.OpenForms во второй раз. Во всяком случае, ее работа отлично работает по-другому. –

0

Когда форма initiallize.

MailSynchronize mfrm = new MailSynchronize(); 
mfrm.Opacity = 0; 
mfrm.Show(); 
mfrm.Hide(); 

Как найти эту форму еще раз?

foreach (Form f in Application.OpenForms) //it will return all the open forms 
{ 
    if (f.Name == "MailSynchronize") 
    { 
      mfrm = (MailSynchronize)f; 
      break; 
    } 
} 

Когда я нашел его, как его снова показать?

mfrm.Opacity = 1; 
mfrm.Show(); 

Спрятать еще раз кнопкой.

mfrm.Hide(); //It will not show form in Application.OpenForms if I hide again by mfrm.Opacity = 0; 
Смежные вопросы