243

Windows フォームアプリケーションをシステム トレイで実行できるようにするには、どうすればよいですか?

トレイに最小化できるアプリケーションではなく、トレイにのみ存在するアプリケーションであり、それ以上のものはありません

  • アイコン
  • ツールチップ、および
  • 右クリック」メニュー。
4

11 に答える 11

121

コード プロジェクトの記事「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();
    }
}
于 2012-04-20T16:33:51.107 に答える
19

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;
        }
    }
于 2009-06-15T09:46:10.467 に答える
16

.NET 1.1 でトレイバー アプリを作成しましたが、フォームは必要ありませんでした。
まず、プロジェクトのスタートアップ オブジェクトをMainモジュールで定義された Sub として設定します。
次に、コンポーネントNotifyIconとをプログラムで作成しますContextMenu。必ず「Quit」など
を含めてください。 を にバインドします。 呼び出します。 Quit のイベント ハンドラで、 setを呼び出してから. に必要なものを追加して、適切に処理してください:)MenuItem
ContextMenuNotifyIcon
Application.Run()
MenuItemNotifyIcon.Visible = FalseApplication.Exit()ContextMenu

于 2009-06-15T10:51:38.467 に答える
13
  1. ウィザードで新しい Windows アプリケーションを作成します。
  2. コードから削除Form1します。
  3. を起動する Program.cs のコードを削除しますForm1
  4. クラスを使用NotifyIconして、システム トレイ アイコンを作成します (アイコンを割り当てます)。
  5. それにコンテキストメニューを追加します。
  6. またはNotifyIcon、 のマウスクリックに反応し、右クリックと左クリックを区別して、コンテキストメニューを設定し、ボタン (右/左) が押されたときにそれを表示します。
  7. Application.Run()アプリを実行し続けるには、Application.Exit()終了します。またはbool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);}。次にbRunning = false;、アプリを終了するように設定します。
于 2009-06-15T11:58:46.480 に答える
11

「システムトレイ」アプリケーションは、通常のWinフォームアプリケーションです。唯一の違いは、Windowsシステムトレイ領域にアイコンを作成することです。NotifyIconコンポーネントを使用してsys.trayアイコンを作成するには、ツールボックス(共通コントロール)で見つけて、そのプロパティを変更します:アイコン、ツールチップ。また、マウスクリックとダブルクリックのメッセージを処理することもできます。

そしてもう1つ、ルックアンドフィールまたは標準のトレイアプリを実現するために。メインフォームのshowイベントにfollowinf行を追加します。

private void MainForm_Shown(object sender, EventArgs e)
{
    WindowState = FormWindowState.Minimized;
    Hide();
} 
于 2009-06-15T09:44:57.287 に答える
8

私の知る限り、フォームを使用してアプリケーションを作成する必要がありますが、フォームにはコントロールがなく、フォームを表示することはありません。NotifyIcon (MSDN のサンプルはここにあります) を使用して、アプリケーションを記述します。

于 2009-06-15T09:31:52.433 に答える
4

これが、 Visual Studio 2010、.NET4でそれを行った方法です。

  1. Windowsフォームアプリケーションを作成し、プロパティで[単一インスタンスアプリケーションの作成]を設定します
  2. ContextMenuStripを追加します
  3. コンテキストメニューストリップにいくつかのエントリを追加し、それらをダブルクリックしてハンドラーを取得します。たとえば、'exit'(ダブルクリック)->ハンドラー-> me.Close()
  4. NotifyIconを追加し、デザイナーセットのcontextMenuStripで、作成したアイコンを選択します(VisualStudioフォルダーの「common7 ...」の下にいくつかあります)。
  5. デザイナでフォームのプロパティを設定します:FormBorderStyle:none、ShowIcon:false、ShowInTaskbar:false、Opacity:0%、WindowState:Minimized
  6. Form1_Loadの最後にMe.Visible=falseを追加します。これにより、Ctrl+を使用するとアイコンが非表示になります。Tab
  7. 必要に応じて実行および調整します。
于 2011-07-26T14:18:54.827 に答える
3

これは、通知領域アプリケーションにとって非常に使いやすいフレームワークです...基本フォームに 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;
        }
    }
}
于 2014-09-18T11:57:41.683 に答える
0
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);
于 2020-12-03T08:43:51.300 に答える
-1

追加するだけ

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;

あなたのフォームオブジェクトに。システム トレイにはアイコンのみが表示されます。

于 2015-07-01T15:39:53.033 に答える