Windows フォームアプリケーションをシステム トレイで実行できるようにするには、どうすればよいですか?
トレイに最小化できるアプリケーションではなく、トレイにのみ存在するアプリケーションであり、それ以上のものはありません
- アイコン
- ツールチップ、および
- 「右クリック」メニュー。
Windows フォームアプリケーションをシステム トレイで実行できるようにするには、どうすればよいですか?
トレイに最小化できるアプリケーションではなく、トレイにのみ存在するアプリケーションであり、それ以上のものはありません
コード プロジェクトの記事「Creating a Tasktray Application」では、システム トレイにのみ存在するアプリケーションを作成するための非常に簡単な説明と例が示されています。
基本的に、Application.Run(new Form1());
行を変更しProgram.cs
て、代わりに を継承するクラスを起動し、ApplicationContext
そのクラスのコンストラクターでNotifyIcon
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyCustomApplicationContext());
}
}
public class MyCustomApplicationContext : ApplicationContext
{
private NotifyIcon trayIcon;
public MyCustomApplicationContext ()
{
// Initialize Tray Icon
trayIcon = new NotifyIcon()
{
Icon = Resources.AppIcon,
ContextMenu = new ContextMenu(new MenuItem[] {
new MenuItem("Exit", Exit)
}),
Visible = true
};
}
void Exit(object sender, EventArgs e)
{
// Hide tray icon, otherwise it will remain shown until user mouses over it
trayIcon.Visible = false;
Application.Exit();
}
}
mat1tが言うように、アプリケーションにNotifyIconを追加してから、次のコードのようなものを使用してツールチップとコンテキストメニューを設定する必要があります。
this.notifyIcon.Text = "This is the tooltip";
this.notifyIcon.ContextMenu = new ContextMenu();
this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method)));
このコードは、システムトレイのアイコンのみを表示します。
this.notifyIcon.Visible = true; // Shows the notify icon in the system tray
フォームがある場合は、次のものが必要になります(何らかの理由で)。
this.ShowInTaskbar = false; // Removes the application from the taskbar
Hide();
右クリックしてコンテキストメニューを取得することは自動的に処理されますが、左クリックで何らかのアクションを実行する場合は、クリックハンドラーを追加する必要があります。
private void notifyIcon_Click(object sender, EventArgs e)
{
var eventArgs = e as MouseEventArgs;
switch (eventArgs.Button)
{
// Left click to reactivate
case MouseButtons.Left:
// Do your stuff
break;
}
}
.NET 1.1 でトレイバー アプリを作成しましたが、フォームは必要ありませんでした。
まず、プロジェクトのスタートアップ オブジェクトをMain
モジュールで定義された Sub として設定します。
次に、コンポーネントNotifyIcon
とをプログラムで作成しますContextMenu
。必ず「Quit」など
を含めてください。
を にバインドします。
呼び出します。
Quit のイベント ハンドラで、 setを呼び出してから. に必要なものを追加して、適切に処理してください:)MenuItem
ContextMenu
NotifyIcon
Application.Run()
MenuItem
NotifyIcon.Visible = False
Application.Exit()
ContextMenu
Form1
します。Form1
。NotifyIcon
して、システム トレイ アイコンを作成します (アイコンを割り当てます)。NotifyIcon
、 のマウスクリックに反応し、右クリックと左クリックを区別して、コンテキストメニューを設定し、ボタン (右/左) が押されたときにそれを表示します。Application.Run()
アプリを実行し続けるには、Application.Exit()
終了します。またはbool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}
。次にbRunning = false;
、アプリを終了するように設定します。「システムトレイ」アプリケーションは、通常のWinフォームアプリケーションです。唯一の違いは、Windowsシステムトレイ領域にアイコンを作成することです。NotifyIconコンポーネントを使用してsys.trayアイコンを作成するには、ツールボックス(共通コントロール)で見つけて、そのプロパティを変更します:アイコン、ツールチップ。また、マウスクリックとダブルクリックのメッセージを処理することもできます。
そしてもう1つ、ルックアンドフィールまたは標準のトレイアプリを実現するために。メインフォームのshowイベントにfollowinf行を追加します。
private void MainForm_Shown(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
Hide();
}
私の知る限り、フォームを使用してアプリケーションを作成する必要がありますが、フォームにはコントロールがなく、フォームを表示することはありません。NotifyIcon (MSDN のサンプルはここにあります) を使用して、アプリケーションを記述します。
これが、 Visual Studio 2010、.NET4でそれを行った方法です。
これは、通知領域アプリケーションにとって非常に使いやすいフレームワークです...基本フォームに NotificationIcon を追加し、自動生成されたコードを以下のコードに変更するだけで十分です。
public partial class Form1 : Form
{
private bool hidden = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
//this.WindowState = FormWindowState.Minimized;
this.Hide();
hidden = true;
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
if (hidden) // this.WindowState == FormWindowState.Minimized)
{
// this.WindowState = FormWindowState.Normal;
this.Show();
hidden = false;
}
else
{
// this.WindowState = FormWindowState.Minimized;
this.Hide();
hidden = true;
}
}
}
notifyIcon1->ContextMenu = gcnew
System::Windows::Forms::ContextMenu();
System::Windows::Forms::MenuItem^ nIItem = gcnew
System::Windows::Forms::MenuItem("Open");
nIItem->Click += gcnew System::EventHandler(this, &your_class::Open_NotifyIcon);
notifyIcon1->ContextMenu->MenuItems->Add(nIItem);
追加するだけ
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
あなたのフォームオブジェクトに。システム トレイにはアイコンのみが表示されます。