У меня проблема. Мне нужно скрыть окно при загрузке окна. Но
private void Form1_Load(object sender, EventArgs e)
{
this.Visible = false;
}
не работает. А свойство Visible
остается верным. Я что-то упускаю?
У меня проблема. Мне нужно скрыть окно при загрузке окна. Но
private void Form1_Load(object sender, EventArgs e)
{
this.Visible = false;
}
не работает. А свойство Visible
остается верным. Я что-то упускаю?
Да, свойство Visible имеет большое значение в Windows Forms, именно оно фактически создает дескриптор и вызывает запуск OnLoad(). Другими словами, окно не существует, пока оно не станет видимым. И он будет игнорировать попытки отменить это.
Довольно часто хочется создать дескриптор, но не делать окно видимым, если вы используете NotifyIcon. Вы можете добиться этого, переопределив SetVisibleCore:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
value = false;
CreateHandle();
}
base.SetVisibleCore(value);
}
Имейте в виду, что OnLoad по-прежнему не запустится, пока окно не станет видимым, поэтому при необходимости переместите код в конструктор. Просто вызовите Show() в обработчике событий контекстного меню NotifyIcon, чтобы сделать окно видимым.
Кажется, вы можете использовать следующее:
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0;
this.ShowInTaskbar = false;
}
Я только что проверил это в приложении winforms, и это сработало.
(Также только что нашел это: Скрытие одной формы при запуске
Используйте 1_
Я думаю, что не рекомендуется устанавливать видимость из события Load формы. Вместо этого я бы сделал это, добавив общедоступный метод:
public void LoadForm(...)
{
// do the all the initializations
}
и вызовите метод для загрузки формы. Форма не должна быть видна, если вы явно не покажете ее:
MyForm instance = new MyForm();
instance.LoadForm(...);
// instance.Show(); or ShowDialog() for dialog form not sure exactly the syntax.
Поместите свой вызов в цикл событий Windows следующим образом:
WindowsFormsSynchronizationContext.Current.Post((obj) => this.Hide(), null);
Так что Hide()
будет вызываться позже, поэтому решите свою проблему.
Я считаю, что это потому, что окно на самом деле не существует до этого события. Лучшее место для этого вне формы:
if (x == 1)
{
form1.ShowForm();
}
else
{
// Don't show the form
}
Если вам действительно нужно сделать это внутри самой формы, то я думаю, вам нужно использовать событие Activated.
РЕДАКТИРОВАТЬ:
Вы также можете попробовать что-то вроде:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 myform = new Form1();
if (myform.CheckStuff())
{
Application.Run(myform);
}
}
Вызовите Hide() в событии Shown, Hide() только устанавливает для Visible значение false, и до того, как форма будет показана, свойство Visible уже имеет значение false...
Используйте this.Hide()
, чтобы скрыть свое окно. this.Close(
) чтобы закрыть