ウィンドウが表示されないアプリケーションを作成する - C#
フォーム ウィンドウが表示されないアプリケーションを作成する方法を紹介します。
UI
下図のUIを準備します。(タスクトレイアイコンを表示するためのフォームです。)
notifyIconコントロール、contextMenuStripを配置します。
notifyIconコントロールを選択し、プロパティウィンドウを表示します。
Iconプロパティを設定します。
今回は下図の画像を持つアイコンファイル(icoファイル)を作成して設定しました。
ContextMenuStripプロパティには、フォームに配置したContextMenuStripを設定します。今回のプログラムの場合はcontexMenuStri1
ContextMenuStripを選択し、Itemsプロパティを編集します。下図の[項目コレクション エディター]が開きますので、[追加]ボタンを押してMenuItem項目を一つ追加します。作成したToolStripMenuItemのTextプロパティを"終了"に変更します。
[項目コレクション エディター]を終了します。デザイナ画面で作成した[終了]メニューを選択しプロパティウィンドウのイベントを表示します。イベント一覧から[Click]イベントをダブルクリックしイベントハンドラーを作成します。
コード
以下のコードを実装します。
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace NonFormApplication
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FormMain fm = new FormMain();
Application.Run();
}
}
}
解説
アプリケーション新規作成時は
Application.Run(new FormMain());
となっているところを
FormMain fm = new FormMain();
Application.Run();
と修正します。Application.Runメソッドにフォームを渡さないことでメインフォームのないアプリケーションとして実行できます。メインフォームのないアプリケーションの場合、UIから終了する手段がないため、今回はタスクトレイにメニューを表示しています。タスクトレイにメニューを表示するnotifyIconを動作させるために、Application.Runメソッドを呼び出す前に、FormMainのインスタンスを作成しています。
FormMain.cs
フォームのコードです。実際に実装するのはContextMenuStripのメニュー要素の[Click]イベントになります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NonFormApplication
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
解説
[終了]メニューが選択されるとアプリケーションを終了します。
実行結果
アプリケーションを実行します。実行しても画面にフォームは表示されませんが、タスクトレイにアイコンが表示されます。
アイコンを右クリックすると[終了]メニューが表示されます。[終了]メニューを選択するとアプリケーションが終了します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用