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



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



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



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

820   20  

20 ответов:

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

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

Application.Run(new MainForm());

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

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

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

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

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

private bool allowshowdisplay = false;

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

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

Потому Что Приложение.Выполнить() наборы форм .Видны = True после того, как он загружает форму, это будет перехватывать, что и присвойте ему значение false. В выше case, он всегда будет устанавливать его в false, пока вы не включите его, установив allowshowdisplay в true.

Теперь, когда форма не будет отображаться при запуске, теперь вам нужно повторно включить SetVisibleCore для правильной работы, установив allowshowdisplay = 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;                
    }
}

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

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

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

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

        base.OnLoad(e);
    }

во время построения формы (конструктор, программа 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.

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

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/

пытаются скрыть приложение из панели задач, а также.

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

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

   base.OnLoad(e);
   }

спасибо. Ruhul

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

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

вы хотите установить состояние окна в свернутом виде и показать на панели задач значение 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;
    }

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

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

вот простой подход:
Это в 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;
}

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

запуск формы с невидимым является лучшим вариантом.

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

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

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

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    MainUIForm mainUiForm = new MainUIForm();
    mainUiForm.Visible = false;
    Application.Run();
}

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

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

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

переопределить 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);
    }
...
}

Почему это вообще так?

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

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

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

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

Me.Opacity = 0
Me.ShowInTaskbar = false

показать в виде:

Me.Opacity = 100
Me.ShowInTaskbar = true

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

установите для формы 'StartPosition' значение 'Manual' и добавьте его в конструктор формы:

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

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

Comments

    Ничего не найдено.