如何隐藏主窗体并仍然运行程序?

时间:2012-01-06 21:27:31

标签: .net winforms hide startup delphi-prism

我想运行我的程序,系统托盘中显示的图标显示但是从一开始就没有显示主窗体。

修改

  lMainForm := new MainForm; 
  lMainForm.ShowInTaskbar := true;
  Application.Run(lMainForm);

没用。执行Application.Run后,将立即显示mainform以及系统托盘中的图标。

3 个答案:

答案 0 :(得分:3)

您可以通过覆盖SetVisibleCore()方法来实现。像这样:

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

请注意Load事件不会触发。请务必将您拥有的任何代码移动到构造函数(首选)或此覆盖。

此代码仅禁止窗口一次。您可以稍后调用Show()或设置Visible = true以使窗口正常显示。您通常在NotifyIcon的上下文菜单项的Click事件处理程序中执行此操作。

答案 1 :(得分:2)

您目前遇到的问题是您正在调用将主窗体作为参数的Application.Run重载。这将显示您不想要的主要形式。

相反,您应该调用其他Application.Run重载之一。

例如,您可以拨打no parameter overload of Application.Run。在执行此操作之前,请确保已创建并安装了通知图标。并创建,但不显示您的主要形式。

当您准备好显示主表单时,为响应通知图标上的操作,请致电lMainForm.Show。您还希望安排单击表单上的关闭按钮仅隐藏表单而不是关闭它。我假设你希望你的主表单实例隐藏在后台。

所以你的程序的顶层看起来像这样:

//create and show the notify icon here
lMainForm := new MainForm; 
lMainForm.ShowInTaskbar := true;
lMainForm.Visible := false;//I believe this is the default in any case
Application.Run;

您需要在关闭应用程序的通知图标菜单中添加项目。通过以下方式实现:

Application.Exit;

如果您需要对应用程序生命周期进行更细粒度的控制,那么最好使用收到Application.Run overloadApplicationContext

由于我手边没有Prism,我已经用C#/ WinForms检查了这个,我希望它可以转移到Prism!

答案 2 :(得分:1)

你试过了吗?

lMainForm.WindowState := System.Windows.Forms.FormWindowState.Minimized;

lMainForm.Hide(); // call on application start