У меня проблема. Мне нужно скрыть свое окно при загрузке окна. Но
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 и работал.
(Также просто нашел это: Скрыть одиночную форму при запуске
Я думаю, что неплохо установить видимость из формы Load event. Вместо этого я сделаю это, добавив общедоступный метод:
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
}
Если вам действительно нужно сделать это внутри самой формы, я думаю, вам нужно использовать активированное событие.
EDIT:
Вы также можете попробовать что-то вроде:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 myform = new Form1();
if (myform.CheckStuff())
{
Application.Run(myform);
}
}
Используйте this.Opacity = 0;
this.Opacity = 0;
this.ShowInTaskbar = false;
Используйте this.Hide()
, чтобы скрыть свое окно. this.Close(
), чтобы закрыть
Вызвать Скрыть() в событии Shown, Hide() только устанавливает видимость на false, и до того, как форма будет показана, свойство Visible уже неверно...