본문 바로가기
📁 [4] 개발자 정보 & 코드 노트/C#

C# Windows Forms 강의 24편: NotifyIcon을 활용한 시스템 트레이 아이콘

by wawManager 2025. 2. 27.

1. 강의 개요

이번 강의에서는 NotifyIcon 컨트롤을 사용해 Windows Forms 애플리케이션을 **시스템 트레이(System Tray)**에 표시하는 방법을 학습합니다.
NotifyIcon은 애플리케이션이 실행 중임을 알리거나 간단한 작업(메뉴, 알림)을 제공할 수 있는 방법을 제공합니다.


2. 학습 목표

  1. NotifyIcon 컨트롤을 사용해 시스템 트레이에 아이콘 추가.
  2. NotifyIcon과 ContextMenuStrip을 결합해 메뉴 기능 구현.
  3. NotifyIcon의 알림 메시지(풍선 도움말) 표시.

3. NotifyIcon이란?

NotifyIcon은 시스템 트레이 영역(화면 오른쪽 하단, 작업 표시줄 옆)에 표시되는 아이콘을 관리하는 컨트롤입니다.

  • 애플리케이션이 백그라운드에서 실행 중임을 알림.
  • 아이콘 클릭 시 메뉴 또는 알림 표시.

NotifyIcon 주요 속성

속성 설명 예제

Icon 트레이에 표시될 아이콘 notifyIcon1.Icon = SystemIcons.Application;
Text 아이콘에 마우스를 올렸을 때 표시될 텍스트 notifyIcon1.Text = "애플리케이션 실행 중";
Visible 아이콘 표시 여부 notifyIcon1.Visible = true;

NotifyIcon 주요 이벤트

이벤트 설명 예제

Click 아이콘을 클릭했을 때 발생 notifyIcon1.Click += NotifyIcon1_Click;
BalloonTipClicked 풍선 도움말이 클릭되었을 때 발생 notifyIcon1.BalloonTipClicked += NotifyIcon1_BalloonTipClicked;

4. 실습: NotifyIcon으로 시스템 트레이 메뉴 및 알림 구현

요구사항

  1. NotifyIcon에 애플리케이션 아이콘과 기본 정보를 표시.
  2. ContextMenuStrip을 사용해 "열기", "종료" 메뉴 구현.
  3. NotifyIcon에 풍선 도움말 메시지 표시.

폼 구성

컨트롤 타입 이름 텍스트 설명

NotifyIcon notifyIcon1 (없음) 시스템 트레이에 표시될 아이콘.
ContextMenuStrip contextMenuStrip1 (없음) NotifyIcon의 메뉴.

코드 작성

Form1.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitializeNotifyIcon();
        }

        private void InitializeNotifyIcon()
        {
            // ContextMenuStrip 설정
            var contextMenu = new ContextMenuStrip();
            contextMenu.Items.Add("열기", null, OpenApplication);
            contextMenu.Items.Add("종료", null, ExitApplication);

            // NotifyIcon 설정
            notifyIcon1.Icon = SystemIcons.Application;
            notifyIcon1.Text = "애플리케이션 실행 중";
            notifyIcon1.Visible = true;
            notifyIcon1.ContextMenuStrip = contextMenu;

            // 풍선 도움말 표시
            notifyIcon1.ShowBalloonTip(3000, "애플리케이션 실행", "이 프로그램은 시스템 트레이에 표시됩니다.", ToolTipIcon.Info);
        }

        // "열기" 메뉴 클릭 이벤트
        private void OpenApplication(object sender, EventArgs e)
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
        }

        // "종료" 메뉴 클릭 이벤트
        private void ExitApplication(object sender, EventArgs e)
        {
            notifyIcon1.Visible = false; // NotifyIcon 숨기기
            Application.Exit();
        }

        // 폼 최소화 시 시스템 트레이로 이동
        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide(); // 폼 숨기기
            }
        }
    }
}

Form1.Designer.cs

namespace WindowsFormsApp1
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;
        private NotifyIcon notifyIcon1;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.notifyIcon1 = new NotifyIcon();
            this.SuspendLayout();

            // notifyIcon1
            this.notifyIcon1.Text = "notifyIcon1";
            this.notifyIcon1.Visible = true;

            // Form1
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(400, 300);
            this.Name = "Form1";
            this.Text = "NotifyIcon 예제";
            this.ResumeLayout(false);
        }
    }
}

5. 실행 결과

  1. 시스템 트레이 아이콘 표시
    • 애플리케이션 실행 시 시스템 트레이에 아이콘이 표시됩니다.
    • 아이콘에 마우스를 올리면 "애플리케이션 실행 중"이라는 텍스트가 나타납니다.
  2. ContextMenuStrip 동작
    • 시스템 트레이 아이콘을 오른쪽 클릭하면 "열기"와 "종료" 메뉴가 표시됩니다.
    • "열기"를 클릭하면 숨겨진 폼이 다시 나타납니다.
    • "종료"를 클릭하면 애플리케이션이 종료됩니다.
  3. 풍선 도움말 메시지
    • 애플리케이션 실행 시 "이 프로그램은 시스템 트레이에 표시됩니다."라는 풍선 도움말 메시지가 표시됩니다.
  4. 폼 최소화 시 동작
    • 폼을 최소화하면 트레이 아이콘만 남고, 폼은 화면에서 사라집니다.
    • NotifyIcon 메뉴에서 "열기"를 클릭하면 폼이 다시 나타납니다.

6. 주요 개념 요약

  1. NotifyIcon은 애플리케이션이 백그라운드에서 실행 중일 때 사용자에게 알리거나 작업을 제공하는 데 유용.
  2. ContextMenuStrip을 통해 NotifyIcon의 메뉴를 구성할 수 있음.
  3. 폼 최소화 시 Hide() 메서드를 사용해 트레이로 이동하는 사용자 경험을 제공.