【问题标题】:How to hide the mainform and still run the program?如何隐藏主窗体并仍然运行程序?
【发布时间】:2012-02-04 14:10:07
【问题描述】:

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

编辑:

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

没用。执行 Application.Run 后,主窗体与图标一起显示在系统托盘中。

【问题讨论】:

  • “系统托盘”是指通知区域吗?您需要为此创建一个 NotificationIcon 项(IIRC 名称),将其与“隐藏”表单相关联,并为其提供上下文菜单/单击处理程序以允许您与程序进行交互。

标签: .net winforms hide startup delphi-prism


【解决方案1】:

你试过了吗:

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

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

【讨论】:

  • 最小化是不好的。您需要将 Visible 设置为 False 才能将其移出任务栏。
  • @David,我将 Visible 设置为 false 并且仍然显示或显示主窗体。我不希望任务栏中的主窗体或显示的主窗体,但它在系统托盘中的图标正在工作。顺便说一句,你的头像很有趣哈哈。
【解决方案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;

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

由于我手头没有 Prism,我已使用 C#/WinForms 进行了检查,我希望它可以顺利转移到 Prism!

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多