Tray Icon은 작업표시줄 오른쪽에 있는 작은 아이콘을 트레이 아이콘(Tray Icon)이라 합니다.

종료 혹은 최소화 버튼을 눌렀을때 Tray로 이동시키고 오른쪽버튼을 눌렀을때 ContextMenu가 보여지는 방법입니다.
1. 폼 디자이너 도구에서 NotifyIcon을 폼에 추가시켜줍니다.

2. 속성창에서 아이콘을 설정해줍니다.(아이콘을 설정해주지 않을시에 작업표시줄에 아이콘이 나타나지 않습니다.)

3. 트레이상태에서 마우스 오른쪽버튼을 눌렀을때 메뉴를 보여주기위해 ContextMenustrip을 폼에 추가시켜줍니다.

4. 폼이벤트에 Resize이벤트를 추가해줍니다.
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == WindowState) //Form상태가 최소화라면
{
Use_Notify();
notifyIcon1.Visible = true; //설정한 트레이아이콘이 보여지게한다
this.Hide(); //Form창을 감춘다
}
else if (FormWindowState.Normal == this.WindowState) //Form상태가 Normal이라면
{
notifyIcon1.Visible = false; //설정한 트레이아이콘이 보여지지않는다.
this.ShowInTaskbar = true; //TaskBar에 나타난다.
}
}
Use_Notify함수는 컨텍스트메뉴를 연결시켜주고
트레이 아이콘으로 이동시 알림기능을 하기 위해 만들었습니다.
private void Use_Notify()
{
notifyIcon1.ContextMenuStrip = contextMenuStrip1; //트레이 마우스 오른쪽버튼을 클릭했을시 나타나는 메뉴연결
notifyIcon1.BalloonTipText = "Test입니다."; //알림풍선 내용
notifyIcon1.BalloonTipTitle = "Form1"; //알림풍선 제목
notifyIcon1.ShowBalloonTip(1); //알림풍선이 보여지는시간.
}
ContextMenuStrip과 BalloonTip

5. FormClosing이벤트를 추가시켜줍니다.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true; //종료가 되지않게 이벤트를 캔슬시켜준다.
this.Hide(); //Form창을 감춘다.
Use_Notify();
notifyIcon1.Visible = true; //설정한 트레이아이콘이 보여지게한다
}
6. NotifyIcon컨트롤에서 MouseDoubleClick이벤트를 추가시켜줍니다.
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) //마우스 왼쪽버튼이라면
{
this.Visible = true; //Form을 보여준다.
this.ShowInTaskbar = true; //TaskBar에 보여준다.
this.WindowState = FormWindowState.Normal; //Form상태를 Normal로 바꿔준다.
notifyIcon1.Visible = false; //Tray아이콘을 감춘다.
}
}
7. ContextMenuStrip에 메뉴마다 Click이벤트를 추가시켜준다.
//ContextMenuStrip메뉴중 exit를 클릭했을때
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
notifyIcon1.Dispose(); //트레이아이콘을 종료한다.
Application.ExitThread(); //Application을 종료한다.
}
//ContextMenuStrip메뉴중 Show를 클릭했을때
private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = true; //Form창을 보여준다.
this.ShowInTaskbar = true; //TaskBar에 보여준다.
this.WindowState = FormWindowState.Normal; //Form상태를 Normal로 바꿔준다.
notifyIcon1.Visible = false; //Tray아이콘을 감춘다.
}