C# WinForm程序启动时不显示主窗体的实现方法

C# 专栏收录该内容
6 篇文章 0 订阅
首先我们需要知道ApplicationContext实质上就是一个Application与主窗体之间的连接器,掌管着二者之间的互动关系。
其中最主要的,就是负责在主窗体关闭时结束线程。既然如此,我们只要根据需要自定义一个ApplicationContext就可以了:
C# Code如下
internal class HideOnStartupApplicationContext ApplicationContext
{
    
private Form mainFormInternal;

    
public HideOnStartupApplicationContext(Form mainForm)
    {
        
this.mainFormInternal mainForm;
        
this.mainFormInternal.FormClosed += new FormClosedEventHandler(mainFormInternal_FormClosed);
    }

    
void mainFormInternal_FormClosed(object senderFormClosedEventArgs e)
    {
        
Application.Exit();
    }
}


接下来在Main函数里面修改Form的启动方式
Application.Run(new HideOnStartupApplicationContext(new MainForm()));

网上找到的资料就是这样了.   但实际上这个方法有点问题, 我也觉得是优点的部分. 那就是因为现在的MianForm实际上还未显示. 包括Load事件都还没有触发.. 这时MainForm中直接使用Close()方法根本就无法触发事件. 必须要先使用this.Show()以后才行.
所以在主窗体我们还需要一些处理. 这里要用到一个Load事件, 以及其他地方的关闭窗体时的处理.
在Load事件中做如下处理
bool isLoaded false;
private void MainForm_Load(object senderEventArgs e)
{
    
isLoaded true;
}

我这里是NotifyBar中一个退出按钮的事件. 处理如下
private void CloseToolStripMenuItem_Click(object senderEventArgs e)
{
    
if (isLoaded)
    {

       
  mainNotifyBar . Dispose ();
        this.Close();
    }
    
else
    
{
        
Application.Exit();
    }
}


稍微解释下.   其实就是因为窗体还未创建. 所以需要在Load事件来判断是否已经加载了. 如果还没有加载则在退出的时候直接退出程序, 当然因为我这有NotifyBar的缘故, 同时需要释放这个控件, 不然右下角这个程序的图标不会主动消失. 当然如果启动了还是老样子. 调用Close方法来退出就可以了.

这里也顺带把另一种方法写下.   如果窗口即使不显示 还是想要能先加载完成就可以按如下方法. 也比较简单
设置主窗体的如下属性就可以了.
this.ShowInTaskbar false;
this.WindowState FormWindowState.Minimized;

当然需要显示的时候还是需要按照自己的需求设置回来.
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值