ページ

2006年4月17日月曜日

VB2005 のアプリケーションフレームワークを C# で使う

USERS GROUP の C# ML でしったんですが、VB2005 の Windows.Forms なプロジェクトにはアプリケーションフレームワークなんていう機能があるんですね。


VB2005 のプロジェクトのプロパティに 「アプリケーションフレームワークを有効にする」 なんていうチェックボックスがあって、「シャットダウンモード」 を 「最後のフォームが閉じるとき」 にすると、開いているフォームがなくなったときに自動的にアプリケーションが終了するようになります。C# で同じことをしようとすると自分でフォームの数なんかを管理したりするコードを書かなくちゃいけません (よね?プロジェクトのプロパティを見ても C# にはアプリケーションフレームワークに該当するような設定はないみたいなんで)。
けど、VB がそんなに特殊なことをやってるとは思えません。きっと、どっかに (きっと Microsoft.VisualBasic あたり) アプリケーションフレームワークの機能を実現するクラスがあるんじゃないかと思います。。。って、ありました。


というわけで、VB がやっているのと同じことを C# でやってみました。



  1. Microsoft.VisualBasic.dll を参照設定に追加する。

  2. Program.cs の内容を以下のようにする。(namespace と OnCreateMainForm() メソッドの内容はプロジェクトにあわせて修正してください。OnCreateMainForm() メソッドは名前のとおり、起動時に最初に表示するフォームを設定してあげるメソッドです)

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace CSWindowsApplication
{
internal class Program : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.SetCompatibleTextRenderingDefault(false);
Program app = new Program();
app.Run(args);
}
public Program() : base(Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
{
this.IsSingleInstance = false;
this.EnableVisualStyles = true;
this.SaveMySettingsOnExit = false;
this.ShutdownStyle = Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterAllFormsClose;
}
protected override void OnCreateMainForm()
{
this.MainForm = new CSWindowsApplication.Form1();
}
}
}


これだけです。
上記のコードの意味は見てもらえばだいたいわかるんじゃないかと思います。また、上記には書いてませんが OnStartup()、OnStartupNextInstance()、OnShutdown() イベントなどを override することもできます。また、スプラッシュウインドウを表示するときは、適当なフォーム、たとえば、frmSplash を作成しておいて、


        protected override void OnCreateSplashScreen()
{
this.SplashScreen = new frmSplash();
}


としてやれば OK です。frmSplash は ControlBox、MaximizeBox、MinimizeBox、ShowIcon、ShowInTaskbar を全部 False にして StartPosition を CenterScreen に、Text をなしにしてやるとそれらしくなるんじゃないかと思います。

0 件のコメント:

コメントを投稿