этот.Видимый не работает в Windows Forms
у меня проблема. Мне нужно спрятать окно при загрузке окна. Но!--3-->
private void Form1_Load(object sender, EventArgs e)
{
this.Visible = false;
}
не работает. И собственность Visible
остается true. Я что-то упускаю?
9 ответов
да, свойство 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, и он работал.
(также только что нашел это:одна форма скрыть при запуске
Я думаю, что не стоит устанавливать видимость из события загрузки формы. Вместо этого я бы сделал это, добавив общедоступный метод:
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);
}
}
вызовите Hide() в показанном событии, Hide () только устанавливает Visible в false, и перед отображением формы свойство Visible уже false...