这是前两天课堂上的例子,提供了一个自定义WindowsFormsApplication的范例,主要包括如下的功能
1. 单一实例
2. 闪屏
3. 登陆窗口
4. 任务栏图标和菜单
需要注意的是,WindowsFormsApplicationBase这个类是要添加Microsoft.VisualBisic.dll引用的
class MyApplication : WindowsFormsApplicationBase { NotifyIcon taskBarIcon; public MyApplication(bool singleton) : base(AuthenticationMode.ApplicationDefined) { //设置单实例 this.IsSingleInstance = true; //添加任务栏按钮 taskBarIcon = new NotifyIcon(); taskBarIcon.Icon = Properties.Resources.Northwind; ContextMenuStrip contextMenu = new ContextMenuStrip(); contextMenu.Items.Add( new ToolStripMenuItem( "退出", Properties.Resources.close, (sender, eventArgs) => { if (MessageBox.Show( "你是否真的要退出?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { Application.Exit(); } })); contextMenu.Items.Add( new ToolStripMenuItem( "帮助", Properties.Resources.help, (sender, eventArgs) => { MessageBox.Show("帮助文档还在制作中"); })); taskBarIcon.ContextMenuStrip = contextMenu; taskBarIcon.ShowBalloonTip(2000, "欢迎", "欢迎使用该软件", ToolTipIcon.Info); taskBarIcon.Visible = true; } public MyApplication() : this(true) { } protected override void OnCreateSplashScreen() { base.OnCreateSplashScreen(); LoginForm login = new LoginForm(); if (login.ShowDialog() != DialogResult.OK) { Environment.Exit(-1);//这里不能用Application.Exit,因为当前是一个自定义的Application } this.MinimumSplashScreenDisplayTime = 2000;//最少显示两秒 this.SplashScreen = new SplashForm(); } protected override void OnShutdown() { base.OnShutdown(); taskBarIcon.Dispose(); } protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) { base.OnStartupNextInstance(eventArgs); eventArgs.BringToForeground = true; } protected override void OnCreateMainForm() { base.OnCreateMainForm(); this.MainForm = new MainForm(); } }