Подтвердить что ты не робот

This.Visible не работает в Windows Forms

У меня проблема. Мне нужно скрыть свое окно при загрузке окна. Но

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Visible = false;
    }

не работает. И свойство Visible остается верным. Я что-то пропустил?

4b9b3361

Ответ 1

Да, свойство Visible имеет большое значение в Windows Forms, что фактически создает созданный дескриптор и запускает OnLoad(). Другими словами, окно не существует, пока оно не станет видимым. И он будет игнорировать попытки отменить это.

Довольно часто нужно создавать дескриптор, но не делать видимым окно, если вы используете NotifyIcon. Вы можете добиться этого, переопределив SetVisibleCore:

    protected override void SetVisibleCore(bool value) {
        if (!this.IsHandleCreated) {
            value = false;
            CreateHandle();
        }
        base.SetVisibleCore(value);
    }

Помните, что OnLoad все равно не будет работать, пока окно не станет видимым, поэтому при необходимости переместите код в конструктор. Просто вызовите Show() в обработчике события контекстного меню NotifyIcon, чтобы сделать окно видимым.

Ответ 2

Кажется, вы можете использовать следующее:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Opacity = 0;
        this.ShowInTaskbar = false;
    }

Я только что протестировал его в приложении winforms и работал.

(Также просто нашел это: Скрыть одиночную форму при запуске

Ответ 3

Я думаю, что неплохо установить видимость из формы 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.

Ответ 4

Поместите свой вызов в цикл событий Windows следующим образом:

WindowsFormsSynchronizationContext.Current.Post((obj) => this.Hide(), null);

Итак, Hide() будет вызываться позже, поэтому исправьте вашу проблему.

Ответ 5

Я считаю, что это потому, что окно действительно не существует до этого события. Лучшее место для этого - вне формы:

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);
        }
    }

Ответ 6

Используйте this.Opacity = 0;

Ответ 7

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

Ответ 8

Используйте this.Hide(), чтобы скрыть свое окно. this.Close(), чтобы закрыть

Ответ 9

Вызвать Скрыть() в событии Shown, Hide() только устанавливает видимость на false, и до того, как форма будет показана, свойство Visible уже неверно...