2010-09-22 1 views
8

Я хотел, чтобы скрыть главное окно моего приложения при запуске, так что я положил это в конструкторе:Скрытие форм при запуске: почему это не так. Скрыть() скрыть свою форму?

this.Hide(); 

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

+0

возможный дубликат [this.Visible не работает в Windows Forms] (HTTP: // StackOverflow. com/questions/3742709/this-visible-is-not-working-in-windows-forms) –

ответ

20

вы можете использовать эту строку кода. Это обыкновение скрывать, но это будет сведено к минимуму:

this.WindowState = FormWindowState.Minimized; 

кроме того, если вы не хотите показывать на панели задач либо, вы можете добавить эту строку:

this.ShowInTaskbar = false; 

Но почему вы создаете форму, если не хотите, чтобы она была видна в первую очередь?

+0

Потому что он начнется с Windows и будет находиться в системном трее способом, подобным антивирусному и брандмауэрному программному обеспечению. Любая идея относительно того, почему 'this.Hide()' фактически не скрывает форму при вызове из конструктора формы? – Pieter

+1

Я думаю, это потому, что в этот момент (при запуске конструктора) ваша форма еще не была видимой. Только после того, как конструктор будет выполнен, форма будет создана и сделана видимой. Поэтому ваша единственная проблема, почему это не работает, состоит в том, что это делается из конструктора. Я не предлагаю это как решение, но, как эксперимент, создаю таймер и запускаю его из конструктора с задержкой в ​​1 секунду, а метод timer_tick скрывает форму. Это будет работать, поскольку в то время, когда вы вызываете this.Hide() форма будет видна. –

+0

У вас такая же проблема, когда у вас есть такая конструкция в program.cs: Application.Run (new Form1()); и вы пытаетесь написать Application.Exit() в конструкторе Form1. После вызова Application.Exit() ваше приложение будет по-прежнему живым и здоровым, и это потому, что конструктор запускается до Application.Run и, следовательно, не будет иметь никакого эффекта. Такая же проблема для вас. Вы делаете это Скрытым, просто чтобы Application.Run делал его живым и пинал снова. –

0

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

Form1 obj = new Form1(); 
obj.visible = false; 
Application.Run(obj); 

Или попробуйте установить координаты вида в каталог более высокого уровня, как 9000, 9000.

+0

Это не решение. Необходимо использовать переопределение OnVisibleChanged. См. Выше. –

+0

Не размещайте форму вне экрана, но все еще видимо. Слепые пользователи, использующие программное обеспечение для прокрутки, по-прежнему будут «видеть» его (как и пользователи, использующие alt-tab). –

11

Просто переопределить OnVisibleChanged метод и изменить видимость формы там, что-то вроде этого:

protected override void OnVisibleChanged(EventArgs e) 
{ 
    base.OnVisibleChanged(e); 
    this.Visible = false; 
} 

И это все! Простой и чистый.

+0

Это рабочее решение. Вызовите функцию Hide() и поместите над кодом код. Спасибо :) –

+0

Это единственное решение, которое сработало для меня. – tavlima

0

Я попытался сделать это, установив Visible в false или скрываясь в конструкторе и в событии OnLoad.

Ни один из них не имел никакого эффекта, так как форма установлена ​​на Видимый после создания формы и после того, как событие OnLoad запущено, в SetVisibleCore.

Установка формы для скрытия в событии Shown, но форма мгновенно мерцает на экране.

Вы также можете переопределить SetVisibleCore и установить значение false, но затем OnLoad не запускается, а некоторые из других событий перепутаны, например, закрытие формы.

Лучшим решением на мой взгляд является установка формы для минимизации и не показана на панели задач перед вызовом Application.Run().

Таким образом, вместо:

Application.Run(new MainForm()); 

сделать:

MainForm form = new MainForm(); 
form.WindowState = FormWindowState.Minimized; 
form.ShowInTaskbar = false; 

Application.Run(form); 

Затем приложение будет работать со всеми соответствующими событиями уволены (даже OnShown) и не будет отображаться форма.

Если вы хотите, чтобы скрыть/показать форму, как обычно, после этого, вам нужно установить WindowState и ShowInTaskbar обратно в Normal и true.

В событии Shown вы можете установить ShownInTaskbar в значение true, а затем правильно скрыть форму.

this.Shown += new System.EventHandler(this.MainFormShown); 

...

void MainFormShown(object sender, EventArgs e) 
{ 
    this.ShowInTaskbar = true; 
    this.Visible = false; 
} 

Настройки WindowState назад к нормальному в то время как форма скрыта не имеет никакого эффекта, так что вам нужно будет сделать это после того, как вы показать форму еще раз, в противном случае значок будет быть в панели задач, но форма будет минимизирована.

this.Show(); 
this.WindowState = FormWindowState.Normal; 
+0

Рабочее решение выше. Это не будет работать. –

+0

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

3

Если вы предпочитаете использовать this.Hide или this.Show вы можете сделать это

protected override void OnShown(EventArgs e) 
{ 
    base.OnShown(e); 
    this.Hide(); 
} 
Смежные вопросы