Одиночная форма Скрыть при запуске - PullRequest
69 голосов
/ 16 сентября 2008

У меня есть приложение с одной формой, и в методе Load мне нужно скрыть форму.

Форма будет отображаться сама собой, когда в этом есть необходимость (подумайте по аналогии со всплывающим окном в стиле outlook 2003), но я не могу понять, как скрыть форму при загрузке без каких-либо проблем.

Есть предложения?

Ответы [ 22 ]

1 голос
/ 06 июня 2017

Переопределить OnVisibleChanged в форме

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

    base.OnVisibleChanged(e);
}

Вы можете добавить триггер, если вам может понадобиться показать его в какой-то момент

public partial class MainForm : Form
{
public bool hideForm = true;
...
public MainForm (bool hideForm)
    {
        this.hideForm = hideForm;
        InitializeComponent();
    }
...
protected override void OnVisibleChanged(EventArgs e)
    {
        if (this.hideForm)
            this.Visible = false;

        base.OnVisibleChanged(e);
    }
...
}
0 голосов
/ 03 марта 2017

Это прекрасно работает для меня:

[STAThread]
    static void Main()
    {
        try
        {
            frmBase frm = new frmBase();               
            Application.Run();
        }

Когда я запускал проект, все было скрыто, в том числе и на панели задач, если только мне не нужно его показывать.

0 голосов
/ 27 июня 2013

Я делаю это так - с моей точки зрения, самый простой способ:

установите 'StartPosition' формы в 'Manual' и добавьте это в конструктор формы:

Private Sub InitializeComponent()
.
.
.
Me.Location=New Point(-2000,-2000)
.
.
.
End Sub

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

0 голосов
/ 16 сентября 2008

Запуск приложения без формы означает, что вам придется самостоятельно управлять запуском / закрытием приложения.

Лучше всего начинать с невидимой формы.

0 голосов
/ 01 апреля 2011

В качестве дополнения к ответу Groky (что на самом деле является лучшим ответом на мой взгляд), мы могли бы также упомянуть класс ApplicationContext , который также позволяет (как показано в образец статьи) возможность открывать две (или даже больше) формы при запуске приложения и контролировать время жизни приложения со всеми из них.

0 голосов
/ 16 сентября 2008

В конструкторе установите для свойства Visible формы значение false. Затем избегайте вызова Show (), пока он вам не понадобится.

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

0 голосов
/ 15 марта 2010
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    MainUIForm mainUiForm = new MainUIForm();
    mainUiForm.Visible = false;
    Application.Run();
}
0 голосов
/ 23 июля 2009

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

Чтобы скрыть форму:

Me.Opacity = 0
Me.ShowInTaskbar = false

Показать форму:

Me.Opacity = 100
Me.ShowInTaskbar = true
0 голосов
/ 29 декабря 2008

Почему это вообще так происходит?

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

Не нужно быть жадным и забирать память, необходимую для формы, когда она вам даже не нужна.

0 голосов
/ 29 декабря 2008

В этом примере поддерживается полная невидимость, а также только NotifyIcon в системном трее, нет кликов и многое другое.

Подробнее здесь: http://code.msdn.microsoft.com/TheNotifyIconExample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...