앙큼한 개발기록

[C#] tray icon 설정 방법 (winForm NotifyIcon) 본문

개발

[C#] tray icon 설정 방법 (winForm NotifyIcon)

angkeum 2023. 5. 25. 16:15

window form 프로그램들을 보면 작은 아이콘으로 되어 있는 것들을 볼 수 있다. 

window tray icon

이러한 아이콘들을 tray icon 이라고 하는데 

오늘은 내가 window form 프로그램을 개발하면서 trayicon을 설정하는 방법에 대해 정리해 보고자 한다. 

 

1. notifyicon 설정

처음에 시작되는 form.cs의 디자인에서 

[도구상자] - [검색] - [notifyicon]을 하면 나오는 도구 상자 항목을 클릭해서 폼에 넣어 준다. 

win form tools

 

우클릭 속성을 통해 이것저것 설정해 준다. 

난 이름이랑 텍스트랑 아이콘만 설정한다. 

(아이콘을 미 설정하면 아무것도 안나온다. form이랑 다르게 기본 아이콘이 없는것 같다.)

아이콘은 인터넷에 free ico치면 많이 나오는데 그중에서 인쇄모양의 아이콘을 가져다 썼다.

notifyIcon properties

notifyIcon을 마우스로 더블클릭하면 마우스 더블클릭 이벤트가 binding 된다. 

notifyIcon
notifyIcon mouse double click

 

 

2. 도구 상자에서 contextMenu 추가 

notifyIcon이랑 동일하게 도구 상자에서 [ContextMenuStrip]을 검색해서 더블클릭으로 넣어준다. 

contextMenuStrip properties

 

contextMenu의 속성을 설정해주고 

메뉴의 항목들을 클릭해서 적어주면 된다. 

나는 최소화된 프로그램을 표시하고 종료하는 것만 넣었다. 

ContextMenu도 더블클릭하면 Form에 클릭 이벤트가 바인딩 된다. 

ContextMenuStrip Text

 

이렇게 하면 화면에서 구성할 부분은 다 끝났다. 

이제 소스만 붙이면 끝.

 

3. 프로그램 실행 및 종료시 처리 

디자이너 소스 코드에서 Load, FormClosing에 함수를 바인딩 해주고 

form designer event binding

form.cs에서 notifyIcon이랑 contextMenuStrip 연결후 각각의 이벤트를 설정해 주면 끝.

    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void Form_Load(object sender, EventArgs e)
        {
            this.ShowForm();
            notifyIcon.ContextMenuStrip = contextMenuStrip;
        }

        private void Form_Closing(object sender, FormClosingEventArgs e)
        {
            this.HideForm();
            e.Cancel = true;
        }

        private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.ShowForm();
        }

        private void ShowForm()
        {
            this.WindowState = FormWindowState.Normal;
            this.ShowInTaskbar = true;
            this.Visible = true;
        }

        private void HideForm()
        {
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
            this.Visible = false;
        }

        private void CloseApp()
        {
            // tray icon 종료
            this.Close();
            this.notifyIcon.Visible = false;

            // 프로그램 종료
            Application.ExitThread();
            Application.Exit();
        }

        private void 화면표시ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.ShowForm();
        }

        private void 프로그램종료ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.CloseApp();
        }
    }
}

 

실행 결과 

window tray icon

끝.

Comments