트레이 구현하기...
에... 늘 쓰던건데... 그냥 블로그에 기록해봄
1. 도구상자에서 NotifyIcon 컨트롤을 얹어놓고.
더블클릭이벤트 -> Form.Show();
2. contextMenu 컨트롤도 하나 올리고 -> 종료하기를 구현한다.
3. NotifyIcon에 사용할 아이콘 이미지 하나를 제작하고 컨트롤에 등록해준다.
4. bool Flag하나 선언하고 CheckBox하나를 더 등록한다.
5. 나머진 구현만 하면 되는데... 작업표시줄에 아이콘활성화는 폼을 Hide하고 NotifyIcon.Visible = true; 하면된다.
구현 시 동작은 폼이 닫힘 버튼을 누르거나 X를 눌러 종료시 -> 최소화라는 CheckBox 의 체크값에 따라 되고 안되고를 처리 하며 bClose는 FormClosing이벤트의 e.Cancel 값을 토글하는 목적으로 사용된다.
소스를 아래 붙힌다.
수정 : 2010,2,24일 doClose는 삭제처리..
-> 로직을 생각해보니 doClose는 필요없었던듯 함.
생기게된 이유는 원래 목적이 그거였는데 중간에 외부에서 입력시켜주는 checkBox를 추가하면서 doClose가 필요없는데도... 남겨두었던것...
public partial class MainForm : Form
{
//폼 닫히는 지 확인값.
bool doClose = false;
public MainForm()
{
InitializeComponent();
}
// 닫기버튼으로 폼을 닫는다
// 이때 checkBox의 값은 Closing될때 체크되어 진짜 닫을지 최소화 하고 작업표시줄에 나타낼지가 결정되므로
// 여기서는 무시한다.
private void button3_Click(object sender, EventArgs e)
{
this.Hide();
doClose = false;
this.Close();
}
// 폼이 처음 Show되는 위치를 지정한다. 작업표시줄 바로위에 표시되게 값을 지정함.
protected override void OnShown(EventArgs e)
{
this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
this.Top = Screen.PrimaryScreen.WorkingArea.Height - this.Height;
notifyIcon1.Visible = false;
base.OnShown(e);
}
// 폼이 닫힐때 최소화 체크값에 따라 닫힐지 최소화가 될지가 결정된다.
// bClose값이 e.Cancel값으로 그냥 닫는 것을 캔슬 해준다.
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (checkBox1.Checked)
{
doClose = true;
this.Hide();
notifyIcon1.Visible = true;
}
e.Cancel = doClose;
e.Cancel = checkBox1.Checked; // 이렇게 바뀜.
base.OnFormClosing(e);
}
폼이 완전 닫혔으면 NotifyIcon을 정리해준다 안그러면 작업표시줄에 살아있는 것 처럼 남게 된다.
protected override void OnFormClosed(FormClosedEventArgs e)
{
this.notifyIcon1.Visible = false;
this.notifyIcon1.Dispose();
this.notifyIcon1 = null;
base.OnFormClosed(e);
}
// 닫기버튼 클릭시...
private void button4_Click(object sender, EventArgs e)
{
this.Hide();
doClose = true;
notifyIcon1.Visible = true;
}
// ContextMenu에 종료하기 클릭시...
private void 종료하기ToolStripMenuItem_Click(object sender, EventArgs e)
{
doClose = false;
this.checkBox1.Checked = false;
this.Close();
}
// NotifyIcon을 더블클릭시 프로그램 Show기능
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
doClose = true;
notifyIcon1.Visible = false;
this.Show();
}
}
대충 훑어보았음... 늘 쓰는거라서... 정말 많이 필요해지면... 중간에 따로 관리 객체를 만들어서 프레임웍에 넣을까?
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
목록 - 로테이션 응용컨트롤... (0) | 2010.03.19 |
---|---|
리스트 박스를 구현... (2) | 2010.03.12 |
데이타 그리드 뷰에 콤보 컬럼에 대한 값 읽기... (0) | 2010.02.05 |
ListView에 컬럼 동적 제어... (0) | 2010.02.05 |
텍스트박스 라인넘버 넣기! (0) | 2009.10.26 |