我想运行我的程序,系统托盘中显示的图标显示但是从一开始就没有显示主窗体。
修改
lMainForm := new MainForm;
lMainForm.ShowInTaskbar := true;
Application.Run(lMainForm);
没用。执行Application.Run后,将立即显示mainform以及系统托盘中的图标。
答案 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
overload的ApplicationContext
。
由于我手边没有Prism,我已经用C#/ WinForms检查了这个,我希望它可以转移到Prism!
答案 2 :(得分:1)
你试过了吗?
lMainForm.WindowState := System.Windows.Forms.FormWindowState.Minimized;
或
lMainForm.Hide(); // call on application start