동적 메뉴로 세션리스트를 메뉴에 넣어 보겠습니다.
전체 소스
SESSION 을 동적 메뉴로 구성
다음과 같이 세션정보를 동적 메뉴에 추가할수 있습니다.
.Click 에 등록된 이벤트가 SessionMenuItem_Click인데 SessionMenuItem_Click에서 선택된 메뉴를 알수 있습니다.
// 동적 메뉴 추가 int iTemp = 0; foreach (clsWatSerialBase c in m_clsSession.ObjWatSerialBase) { this.setupToolStripMenuItem[iTemp] = new ToolStripMenuItem(); this.setupToolStripMenuItem[iTemp].Name = iTemp.ToString(); this.setupToolStripMenuItem[iTemp].Size = new System.Drawing.Size(152, 22); this.setupToolStripMenuItem[iTemp].Text = c.Name; this.setupToolStripMenuItem[iTemp].Click += new System.EventHandler(this.SessionMenuItem_Click); this.파일ToolStripMenuItem.DropDownItems.Insert(5+iTemp, this.setupToolStripMenuItem[iTemp]); iTemp++; }
SessionMenuItem_Click 에서 선택된 메뉴로 OPEN 하는 코드입니다.
private void SessionMenuItem_Click(object sender, EventArgs e) { try { int iSelNum = Convert.ToInt32((((ToolStripMenuItem)sender).Name)); CloseComm(sender, e); m_sp1 = new SerialPort(); m_sp1.PortName = m_clsSession.ObjWatSerialBase[iSelNum].PortNum; m_sp1.BaudRate = Convert.ToInt32(m_clsSession.ObjWatSerialBase[iSelNum].Baud); ConnectComm(m_sp1, sender, e); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }
[연결끊기] 메뉴
[연결끊기] 메뉴는 연결이 되었을 때는 활성화되어야 하고, 연결이 끊겨 있을 때는 비활성화되어야 합니다.
활성화
this.연결끊기ToolStripMenuItem.Enabled = true;
비활성화
this.연결끊기ToolStripMenuItem.Enabled = false;
이번 장은 분량이 별로되지 않지만 어려운 내용이 많습니다.
동적 메뉴 할당하는 것과 메뉴를 이벤트에 연결하는 부분이 어렵습니다.
참고로 int iSelNum = Convert.ToInt32((((ToolStripMenuItem)sender).Name)); 한 줄 구현하는데 1시간 넘게 걸렸습니다 ㅡㅡ.
동적 메뉴에 대한 자료도 워낙 없었고, C#에서 캐스팅이 안되는줄 알고 있어서 고생좀 했습니다 ㅎㅎ
다음 장에는 도구바를 추가해서 몇가지 명령을 도구바로 해보겠습니다.