using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Collections; using Janus.Windows.UI.CommandBars; namespace IControls_FireManager { // 폼생성에 관련된 함수는 여기 클래스에서 전담한다 public static class _Form { // 중복 생성 방지용 해쉬테이블 (폼이름, 폼) public static Hashtable CreatedForm = new Hashtable(); // 폼 생성하기 // 폼을 닫는 이벤트는 2가지이다 // 이벤트1 : 생성된 폼에서 오른쪽 상단 닫기 아이콘을 클릭해서 폼 닫는 경우 -> CreateForm.FormClosing // 이벤트2 : 다른 폼에서 현재 생성된 폼을 닫기하라고 명령하는 경우 -> _Event.FormClose_SendMessage_Event // UIcommand 메뉴바 체크 상태 구현 : UICommand 가 null 이면 메뉴바에서 생성된 폼이 아닌것으로 간주함 public static void Create(Form CreateForm, UICommand UIcommand) { // 폼이름을 키로 함. 결국 폼이름으로 검색 if (CreatedForm.Contains(CreateForm.Name) == true) { // 이미 생성된 폼이라면 포커스를 준다 // 파라미터는 동적생성한 폼이므로 파라미터의 속성을 접근해서는 안된다. foreach (DictionaryEntry de in CreatedForm) { if (CreateForm.Name == de.Key.ToString()) { // 최대화 혹은 최소화 된 창을 일반으로 돌리고 포커스를 줌 ((Form)de.Value).WindowState = FormWindowState.Normal; ((Form)de.Value).Focus(); break; } } } else { // 폼이름(Form 속성의 Name 이 Key 값이다. 리스트에 추가함 CreatedForm.Add(CreateForm.Name,CreateForm); // 이벤트1 : 생성된 폼에서 오른쪽 상단 닫기 아이콘을 클릭해서 폼 닫는 경우 _Event.FormClose_SendMessage_Event +=new _Event.FormClose_SendMessage_Handler(_Event_FormClose_SendMessage_Event); // 이벤트2 : 다른 폼에서 현재 생성된 폼을 닫기하라고 명령하는 경우 CreateForm.FormClosing +=new FormClosingEventHandler(CreateForm_FormClosing); // 새창 출력시 맨앞으로 보이게함 //debug CreateForm.TopMost = true; // 보이기 CreateForm.Show(); // 옵션 (추가하고 싶은 옵션은 여기에서 처리) CreateForm.StartPosition = FormStartPosition.WindowsDefaultLocation; // 메인폼의 메뉴바에서 체크 표시 if (UIcommand != null ) { UIcommand.IsChecked = true; CreateForm.Tag = UIcommand; } // Log _Event.DebugView_SendMessage_Write(CreateForm.Name + _Text.Blank + _Text.LOG_CreateForm); } } // 이벤트1 : 생성된 폼에서 오른쪽 상단 닫기 아이콘을 클릭해서 폼 닫는 경우 public static void CreateForm_FormClosing(object sender,FormClosingEventArgs e) { // 등록된 이벤트를 모두 삭제하고 등록된 폼 리스트에서 삭제한다 Form CreateForm = (Form)sender; // 창이 소멸될때 잔상이 남는다 CreateForm.Hide(); // 이벤트1 : 해제 _Event.FormClose_SendMessage_Event -= new _Event.FormClose_SendMessage_Handler(_Event_FormClose_SendMessage_Event); // 이벤트2 : 해제 CreateForm.FormClosing -= new FormClosingEventHandler(CreateForm_FormClosing); // 리스트에서 삭제 CreatedForm.Remove(CreateForm.Name); // 메인폼의 메뉴바에서 체크 해제 if (CreateForm.Tag != null) { UICommand Command = (UICommand)CreateForm.Tag; Command.IsChecked = false; } // Log _Event.DebugView_SendMessage_Write(CreateForm.Name + _Text.Blank + _Text.LOG_CloseForm); } // 이벤트2 : 다른 폼에서 현재 생성된 폼을 닫기하라고 명령하는 경우 public static void _Event_FormClose_SendMessage_Event(object sender, object etc) { // sender : null 이라면 모두 삭제, 폼이름 이라면 폼이름에 해당하는 폼만 삭제 // etc : 사용미정 // 모든 폼 삭제 if (sender == null) { while (CreatedForm.Count != 0) { foreach (DictionaryEntry de in CreatedForm) { ((Form)de.Value).Close(); break; } } } // 특정폼만 삭제 else { Form senderForm = (Form)sender; foreach (DictionaryEntry de in CreatedForm) { if (senderForm.Name == de.Key.ToString()) { senderForm.Close(); break; } } } } } }