동적 메뉴로 세션리스트를 메뉴에 넣어 보겠습니다.
전체 소스
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); } }
[연결끊기] 메뉴
[연결끊기] 메뉴는 연결이 되었을 때는 활성화되어야 하고, 연결이 끊겨 있을 때는 비활성화되어야 합니다.
활성화
비활성화
이번 장은 분량이 별로되지 않지만 어려운 내용이 많습니다.
동적 메뉴 할당하는 것과 메뉴를 이벤트에 연결하는 부분이 어렵습니다.
참고로 int iSelNum = Convert.ToInt32((((ToolStripMenuItem)sender).Name)); 한 줄 구현하는데 1시간 넘게 걸렸습니다 ㅡㅡ.
동적 메뉴에 대한 자료도 워낙 없었고, C#에서 캐스팅이 안되는줄 알고 있어서 고생좀 했습니다 ㅎㅎ
다음 장에는 도구바를 추가해서 몇가지 명령을 도구바로 해보겠습니다.