[제품종류] IEC266Lite
[개발환경] Visual Studio 2008 C#
=============== 질 문 ===============480x272 사이즈의 SmartForm에서
480x180 만큼의 공간만 innerForm을 사용해 교체하며 사용하려 합니다. (SmartForm 하단에 버튼 배치)
그런데 innerForm 호출 시 기존에 보여지던 SmartForm의 컨트롤이 제대로 보이지 않습니다.
innerForm이 보이는 상태에서 SmartForm의 컨트롤을 동시에 보고 조작할 수 있는 방법이 있을까요?
innerForm으로 구현이 불가능하다면, 다른 방법이 있는지 궁금합니다.
=============== 답 변 ===============
안녕하세요.
SmartForm의 SuspendLayoutInterval 속성값을 1로 하고
공통적으로 보여질 UI의 InitVisible 속성값을 False로 설정하면 됩니다.
아래 참고문서를 확인해 보시기 바랍니다.
1. 테크노트 71. [C#, VB.NET] SmartForm + SmartInnerForm을 이용한 Tab Control 기능구현 예제
http://hnsts.co.kr/ReferenceRoom/TechNoteView/71
2. 테크노트 6. MDI 구성시 ChildForm의 크기를 각각 다르게 구성하는 방법
http://hnsts.co.kr/ReferenceRoom/TechNoteView/6
3. SmartX Framework 예제 중 SmartInnerForm2 예제
어려운 점이 있으시다면 전화 주시면 원격으로 지원이 가능합니다.
하단의 연락처로 연락주시기 바랍니다.
[이메일 주소] app@smartx.co.kr
[전화]070-7094-5002(S/W담당)
감사합니다
=============== 답 변 ===============
안녕하세요, 저번에 알려주신 방법으로 하니 공용 컨트롤의 이미지와 텍스트가 정상적으로 출력되는 것을 확인했습니다.
그런데 혹시 innerForm을 호출한 뒤에 기존 SmartForm의 컨트롤의 Click 이벤트가 발생하지 않는 것 같습니다.
디자이너를 통하지 않고 공용 컨트롤의 Click 이벤트 핸들러를 화면에 따라 교체하는 방식으로 진행하려고 하는데
이 방식에 문제가 있는건지 아니면 공용 컨트롤의 이벤트를 사용할 수 없는건지 궁금합니다.
혹시 몰라서 프로젝트 압축본도 첨부드립니다.
테스트는 초기 화면의 4개 항목중 1개 선택 -> 홈 버튼 클릭 순서로 진행했습니다.
=============== 답 변 ===============
안녕하세요.
현재 표시되는 폼에 따라 버튼 이벤트를 달리하려면 2가지 방법이 있습니다.
CASE-1] 클릭이벤트를 변경하는 방법
버튼에 클릭이벤트를 추가할 때 직전의 이벤트를 제거하지 않으면 이벤트 메서드가 중첩되어 발생하게 됩니다.
따라서 새로운 클릭이벤트를 추가하기 전, 직전의 클릭이벤트를 반드시 제거해야합니다.
Ex)
// 직전의 클릭이벤트를 제거
btn_Main1.Click -= beforeMethod;
// 새로운 클릭이벤트를 추가
btn_Main1.Click += new System.EventHandler(currentMethod);
CASE-2] 하나의 클릭이벤트에서 현재 폼에 따라 동작을 달리하는 방법
버튼 클릭이벤트 내에서 현재 폼에따라 동작을 달리하도록 코드를 작성합니다.
Ex)
private int m_iPageNum; // 현재 폼을 확인하기 위한 변수
// 버튼 클릭 이벤트
private void btn_Main1_Click(object sender, EventArgs e)
{
// 현재 폼에 따라 동작을 달리함
switch (m_iPageNum)
{
case 0:
// 메인 페이지 실행 코드
screen = SetScreen(Screen.MAIN_IDLE);
break;
case 1:
// InnerForm1 페이지 실행 코드
screen = SetScreen(Screen.MAIN_SETTING);
break;
// .........중략.....
}
}
어려운 점이 있으시다면 전화 주시면 원격으로 지원이 가능합니다.
하단의 연락처로 연락주시기 바랍니다.
[이메일 주소] app@smartx.co.kr
[전화]070-7094-5002(S/W담당)
감사합니다
=============== 답 변 ===============
매번 답변 감사합니다.
저번에 말씀주신대로 이벤트핸들러를 화면 전환 시 마다 제거 후 다시 추가하도록 설정하였습니다.
그런데도 아직 정상적으로 작동하지 않는 것 같습니다.
디버깅 과정에서 버튼.Click의 값이 null이 된 상태에서 이벤트핸들러를 다시 추가하는것을 확인하였는데도
innerForm 외부의 공용 컨트롤을 인식하지 못하고 있습니다ㅠ
다른 원인이 있는건 아닐 지 궁금합니다 ㅠ 도움 부탁드려요