目次

ウィンドウが表示されないアプリケーションを作成する - 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を愛用
掲載日: 2012-04-29
iPentec all rights reserverd.