Nextrp [CPP] RU + Many GEOs Игра на карте России | NEXTRP

Одиночная форма Скрыть при запуске

c# vb.net winforms

110862 просмотра

23 ответа

9367 Репутация автора

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

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

Какие-либо предложения?

Автор: Pondidum Источник Размещён: 16.09.2008 08:10

Ответы (23)


0 плюса

102108 Репутация автора

Вот простой подход:
он в C # (на данный момент у меня нет компилятора VB)

public Form1()
{
    InitializeComponent();
    Hide(); // Also Visible = false can be used
}

private void Form1_Load(object sender, EventArgs e)
{
    Thread.Sleep(10000);
    Show(); // Or visible = true;
}
Автор: aku Размещён: 16.09.2008 08:13

-1 плюса

1005 Репутация автора

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

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

Автор: deemer Размещён: 16.09.2008 08:13

106 плюса

12018 Репутация автора

Решение

Я иду на это из C #, но должно быть очень похоже на vb.net.

В вашем основном программном файле, в методе Main, у вас будет что-то вроде:

Application.Run(new MainForm());

Это создает новую основную форму и ограничивает время жизни приложения временем жизни основной формы.

Однако, если вы удалите параметр для Application.Run (), приложение будет запущено без отображения формы, и вы сможете свободно показывать и скрывать формы сколько угодно.

Вместо того, чтобы скрывать форму в методе Load, инициализируйте форму перед вызовом Application.Run (). Я предполагаю, что форма будет иметь NotifyIcon для отображения значка на панели задач - это можно отобразить, даже если сама форма еще не видна. Вызов Form.Show()или Form.Hide()из обработчиков событий NotifyIcon будет показывать и скрывать форму соответственно.

Автор: Grokys Размещён: 16.09.2008 08:16

0 плюса

1258 Репутация автора

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

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

Автор: Roger Willcocks Размещён: 16.09.2008 08:50

33 плюса

4229 Репутация автора

Я использую это:

private void MainForm_Load(object sender, EventArgs e)
{
    if (Settings.Instance.HideAtStartup)
    {
        BeginInvoke(new MethodInvoker(delegate
        {
            Hide();
        }));
    }
}

Очевидно, вы должны изменить условие if на ваше.

Автор: Matías Размещён: 09.10.2008 08:20

0 плюса

0 Репутация автора

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

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

Автор: TheUberOverLord Размещён: 29.12.2008 04:30

-2 плюса

3722 Репутация автора

Почему это так?

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

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

Автор: Benjamin Autin Размещён: 29.12.2008 08:06

4 плюса

0 Репутация автора

Расширьте свою основную форму с этим:

using System.Windows.Forms;

namespace HideWindows
{
    public class HideForm : Form
    {
        public HideForm()
        {
            Opacity = 0;
            ShowInTaskbar = false;
        }

        public new void Show()
        {
            Opacity = 100;
            ShowInTaskbar = true;

            Show(this);
        }
    }
}

Например:

namespace HideWindows
{
    public partial class Form1 : HideForm
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

Больше информации в этой статье (испанский):

http://codelogik.net/2008/12/30/primer-form-oculto/

Автор: Размещён: 31.12.2008 07:45

-2 плюса

8223 Репутация автора

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

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

Me.Opacity = 0
Me.ShowInTaskbar = false

Чтобы показать форму:

Me.Opacity = 100
Me.ShowInTaskbar = true
Автор: Jon Onstott Размещён: 23.07.2009 05:40

0 плюса

43 Репутация автора

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    MainUIForm mainUiForm = new MainUIForm();
    mainUiForm.Visible = false;
    Application.Run();
}
Автор: kilsek Размещён: 15.03.2010 12:56

91 плюса

911 Репутация автора

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

Создайте bool в вашем классе Form, который по умолчанию равен false:

private bool allowshowdisplay = false;

Затем переопределите метод SetVisibleCore

protected override void SetVisibleCore(bool value)
{            
    base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
}

Поскольку Application.Run () устанавливает формы .Visible = true после загрузки формы, это будет перехватывать это значение и устанавливать значение false. В приведенном выше случае он всегда будет устанавливать значение false, пока вы не включите его, установив для параметра allowhowdisplay значение true.

Теперь это будет препятствовать отображению формы при запуске, теперь вам нужно снова включить SetVisibleCore для правильной работы, установив allowhowdisplay = true. Вы захотите сделать это в любой функции интерфейса пользователя, которая отображает форму. В моем примере это событие левого клика в моем объекте notiyicon:

private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        this.allowshowdisplay = true;
        this.Visible = !this.Visible;                
    }
}
Автор: Paul Aicher Размещён: 17.11.2010 10:56

14 плюса

141 Репутация автора

Во время создания формы (конструктор, программа Main или конструктор форм, в зависимости от ваших целей),

 this.WindowState = FormWindowState.Minimized;
 this.ShowInTaskbar = false;

Когда вам нужно показать форму, предположительно по событию из вашего NotifyIcon, при необходимости измените ее,

 if (!this.ShowInTaskbar)
    this.ShowInTaskbar = true;

 if (this.WindowState == FormWindowState.Minimized)
    this.WindowState = FormWindowState.Normal;

Последовательные события show / hide могут проще использовать свойство Visible формы или методы Show / Hide.

Автор: Jeff Размещён: 17.03.2011 04:47

0 плюса

1619 Репутация автора

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

Автор: Eugenio Miró Размещён: 01.04.2011 05:31

18 плюса

517 Репутация автора

    protected override void OnLoad(EventArgs e)
    {
        Visible = false; // Hide form window.
        ShowInTaskbar = false; // Remove from taskbar.
        Opacity = 0;

        base.OnLoad(e);
    }
Автор: Chriz Размещён: 06.08.2012 04:02

3 плюса

31 Репутация автора

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

 this.visible=false;
 /* to the InitializeComponent() code just before the */
 this.Load += new System.EventHandler(this.DebugOnOff_Load);

Работает просто отлично. но я хотел более простое решение, и оказалось, что если вы добавите:

this.visible=false;
/* to the start of the load event, you get a
simple perfect working solution :) */ 
private void
DebugOnOff_Load(object sender, EventArgs e)
{
this.Visible = false;
}
Автор: echoen Размещён: 09.12.2012 07:56

-2 плюса

1 Репутация автора

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

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

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

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

Автор: steve_k Размещён: 27.06.2013 11:51

3 плюса

31 Репутация автора

Вы захотите установить минимизированное состояние окна и показать на панели задач значение false. Затем в конце вашей формы Загрузить установить состояние окна на максимальный и показать на панели задач в true

    public frmMain()
    {
        Program.MainForm = this;
        InitializeComponent();

        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
    }

private void frmMain_Load(object sender, EventArgs e)
    {
        //Do heavy things here

        //At the end do this
        this.WindowState = FormWindowState.Maximized;
        this.ShowInTaskbar = true;
    }
Автор: George Размещён: 15.03.2016 11:56

5 плюса

197 Репутация автора

Попробуйте также скрыть приложение от панели задач.

Для этого используйте этот код.

  protected override void OnLoad(EventArgs e)
  {
   Visible = false; // Hide form window.
   ShowInTaskbar = false; // Remove from taskbar.
   Opacity = 0;

   base.OnLoad(e);
   }

Благодарю. Рухул

Автор: Metallic Skeleton Размещён: 28.10.2016 05:10

0 плюса

4376 Репутация автора

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

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

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

Автор: Willy David Jr Размещён: 03.03.2017 07:45

1 плюс

11 Репутация автора

Переопределить 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);
    }
...
}
Автор: LKane Размещён: 06.06.2017 07:59

3 плюса

36 Репутация автора

Поместите это в свой Program.cs:

FormName FormName = new FormName ();

FormName.ShowInTaskbar = false;
FormName.Opacity = 0;
FormName.Show();
FormName.Hide();

Используйте это, когда вы хотите отобразить форму:

var principalForm = Application.OpenForms.OfType<FormName>().Single();
principalForm.ShowInTaskbar = true;
principalForm.Opacity = 100;
principalForm.Show();
Автор: Ben Yousaf Размещён: 11.10.2018 03:05

0 плюса

91 Репутация автора

У меня была проблема, похожая на постер, где код для скрытия формы в событии form_Load срабатывал до того, как форма была полностью загружена, что приводило к сбою метода Hide () (без сбоев, просто не работал должным образом).

Другие ответы хороши и работают, но я обнаружил, что в общем случае событие form_Load часто имеет такие проблемы, и то, что вы хотите поместить туда, может быть легко добавлено в конструктор или событие form_Shown.

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

Автор: blind Skwirl Размещён: 18.03.2019 11:45

0 плюса

1 Репутация автора

    static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 form1 = new Form1();
            form1.Visible = false;
            Application.Run();

        }
 private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
            Application.Exit();
        }
Автор: user3733385 Размещён: 21.06.2019 06:49
Вопросы из категории :
32x32