본 자료는
1. 사전 준비 사항
2. 이미지 추출 및 이미지 검증(SmartImageChecker)
3. SmartX 최신 버전의 프로젝트 생성
4. 사용자 인터페이스(UI) 재구성
5. 코드 이전 및 각 컴포넌트 별 변경 사항
6. 프로젝트 빌드 및 기능 테스트
순서로 진행합니다.
해당 작업 단계는 작업 전 Old Ver. (SmartX Framework 3.2.4 이하) 프로젝트와 New Ver.(SmartX New Framework 5.0.0.13) 프로젝트의 개발 환경이 구축되는 것을 목표로 합니다.
[CHECK-1] | Old Ver. 프로젝트의 파일을 열어 정상적으로 빌드와 디자인 부분이 깨지지 않는 지 확인합니다. |
---|
해당 Old Ver. 프로젝트와 동일한 SmartX Framework가 설치되어 있는지 참조 DLL의 버전을 통해 확인하고, 일치하지 않을 경우 Old Ver.에서 사용된 버전과 동일한 SmartX Framework를 설치합니다.
[CHECK-2] | Old Ver. 프로젝트의 .NET Compact Framework의 버전을 확인합니다. |
---|
SmartX New Framework는 .NET Compact Framework 3.5 버전 기반으로 만들어졌기 때문에 .NET Compact Framework의 버전이 동일해야 합니다. .NET Compact Framework 2.0 버전인 경우에는 프로젝트 업데이트해야 합니다.
[CHECK-3] | SmartX New Framework 의 최신 버전을 설치합니다. |
---|
업데이트 당시 최신 버전은 5.0.0.13 이며, 기준 날짜는 2025년 8월 21일입니다.
이후 문서에서는 별도 버전 표기 없이 SmartX New Framework는 최신 버전을 의미합니다.
- [STEP-1] Old 버전 프로젝트에 사용된 이미지를 추출합니다. 전역 리소스와 폼 리소스에 있는 모든 이미지를 추출해야 되며, 보다 자세한 내용은 “TechNote 83. SmartImageChecker를 사용하기 위해 이미지를 취합하는 방법”을 참고하시기 바랍니다.
-
전역 리소스
[설명]
프로젝트의 Properties → Resources에서 관리되는 리소스로 모든 Class에서 접근이 가능[차이]
파일위치에 해당 형식의 파일로 관리[추출 방법]
[STEP-1] 솔루션 탐색기에서 원하는 이미지가 있는 폼의 리소스파일(확장자 .resx)을 더블클릭 하여 열어줍니다.[STEP-2] 이미지를 모두 복사해서 원하는 경로에 Resource 폴더를 만들어 취합합니다.
-
폼 리소스
[설명]
해당 Form 에서만 관리되며 접근 가능[차이]
리소스 파일안에(XXX.resx) XML 형식의 데이터로 추가 됨[추출 방법]
[STEP-1] 솔루션 탐색기에서 원하는 이미지가 있는 폼의 리소스파일(확장자 .resx)을 더블클릭 하여 열어줍니다.[STEP-2] 열린 리소스창 좌측 상단에 스트링 형식을 이미지 형식으로 변경합니다.
[STEP-3] 전체 이미지를 선택하여 내보내기(Export To File)을 선택합니다.
[STEP-4] 원하는 경로에 파일 이름을 지정해 저장 합니다.
- [STEP-2] 추출된 이미지는 Form별로 구분해 폴더에 취합합니다.
-
이미지는 개발자가 자유롭게 분류할 수 있으나 Form 단위로 관리할 경우 폼을 구성할 때 불필요한 탐색을 줄일 수 있어 작업 속도와 정확성이 향상됩니다. 특히 이미지가 많은 경우에는 Form별로 구분하는 방식이 더 효율적이므로 권장드립니다.

- [STEP-3] 정리된 이미지는 반드시 SmartImageChecker를 사용하여 검사합니다.
-
[STEP-2] 에서 추출한 이미지를 검사합니다. 이미지 검사를 생략할 경우, 프로그램 사용 도중 오류가 발생할 수 있습니다. 이는 SmartX 자체의 문제가 아닌, PNG 파일을 디코딩할 때 사용되는 라이브러리가 구형 운영체제(OS)를 기반으로 설계되어 있어 PNG 파일을 제대로 처리하지 못하는 경우입니다. 이러한 오류는 SmartImageChecker를 통해 사전에 검증함으로써 예방할 수 있습니다.
- [STEP-1] Visual Studio 2008를 사용하여 SmartX New Framework 최신 버전의 프로젝트를 생성합니다.
- [STEP-2] 프로젝트 생성 시, .NET Compact Framework 3.5 버전을 선택하고, Old Ver. 프로젝트와 동일한 개발 언어를 선택합니다.
- [STEP-3] Old Ver. 프로젝트에서 사용한 폼 관련 클래스 파일이 아닌 일반 클래스 파일(예: DeviceManager.cs, ______.cs 등)과 외부 참조 파일을 최신 프로젝트에 추가합니다. 폼 관련 클래스는 본 단계에서 제외되며, 추후 별도 작업으로 진행됩니다.

SmartX 외에 Old 프로젝트에서 사용된 참조를 New 프로젝트에 동일하게 추가합니다.
- 프로젝트 솔루션 > 참조 > 우클릭 > 참조 추가 > Old 프로젝트에서 사용한 참조 파일 선택 > 확인

해당 방법은 내부 코드를 별도로 복사할 필요가 없고, 기존 파일이 그대로 반영됩니다.
-
[STEP-1] Old Ver. 프로젝트 폴더에서 사용한 일반 클래스 파일(______.cs)을 찾아 복사합니다.
-
[STEP-2] 새로운 프로젝트의 동일한 폴더 위치에 [STEP-1]에서 복사한 파일을 붙여 넣습니다.;
-
[STEP-3] 새로운 프로젝트에서 솔루션 탐색기 > 프로젝트 우클릭 > 추가 > 기존 항목을 선택해서 붙여 넣은 클래스를 프로젝트에 추가합니다.
-
[STEP-4] 프로젝트를 생성할 때는 원본 프로젝트와 다른 이름(네임스페이스)으로 생성되는 경우가 많습니다. 이 경우, 네임스페이스가 달라 충돌이 발생할 수 있으므로 반드시 기존 소스코드에서 namespace 구문을 변경하시기 바랍니다.
-
[STEP-1] 최신 버전 프로젝트를 연 후 솔루션 탐색기 > 프로젝트 우클릭 > 추가 > 클래스 선택합니다.
-
[STEP-2] Old Ver. 프로젝트에서 사용한 클래스와 동일한 클래스 이름 및 네임스페이스로 .cs 파일을 새로 생성합니다.
-
[STEP-3] Old Ver. 프로젝트에서 일반 클래스 파일의 전체 코드를 복사한 후, 최신 버전 프로젝트에서 동일한 이름의 새 클래스 파일에 붙여넣고 저장합니다.
해당 작업 단계는 최신 버전의 프로젝트에서 UI 재구성 시 해야 하는 작업을 목표로 둡니다. 프로젝트의 크기에 따라 많은 시간이 소요될 수 있으니 반드시 아래 내용을 참고하시기 바랍니다.
- [STEP-1] Old Ver. 프로젝트와 최신 버전의 프로젝트를 동시에 실행합니다.
- [STEP-2] “2.이미지 추출 및 검증” 에서 추출한 이미지 파일 중 전역리소스 파일을 최신 버전 프로젝트에 추가합니다.
폼 리소스와 전역 리소스의 차이는 “2. 이미지 추출 및 이미지 검증(SmartImageChecker)”에서 확인하시기 바랍니다.
-
1) 프로젝트 파일 우클릭 > Add > New Item을 클릭하여 Item 추가창 열기
-
2) Item 추가창에서 Resources File을 선택 후 Add 버튼을 클릭하여 Resources Item 추가
-
3) 추가된 Resources Item에서 파일 형식을 Images로
변경한 뒤 “Add Resource → Add Existing File"을 클릭하여 Image File 추가창 열기
- 4) Image File 추가 창에서 추가할 이미지를 선택하여 “열기” 버튼 클릭
- 4) Image File 추가 창에서 추가할 이미지를 선택하여 “열기” 버튼 클릭
- [STEP-3] 최신 버전의 프로젝트에서 Old Ver.과 동일한 방식으로 컴포넌트를 Form별로 재구성합니다.
최신 프로젝트에 Old Ver. 프로젝트와 동일한 이름으로 Form 관련 소스코드 파일(ex. MainForm.cs, ChildForm.cs 등)을 생성하고 각 파일에 알맞게 SmartForm, SmartInnerForm을 직접 생성합니다.


해당 작업은 Form별로 진행하며 배치 작업을 먼저 끝낸 후 세부 속성 및 이미지 작업을 진행합니다.
Old Ver.의 모든 컴포넌트는 최신 버전의 프로젝트로 복사하여 사용할 수 있습니다. 단, 복사를 하는 경우에도 폼 디자이너에서 일부 속성을 설정해야 합니다.
New 버전으로 업데이트되면서 몇몇 컴포넌트의 속성이 크게 변경되었습니다. 이로 인해 일부 컴포넌트는 복사가 불가능하며, 복사를 위해서는 모든 이벤트 연결을 해제해야 합니다.
따라서 복사가 되지 않는 컴포넌트의 경우 최신 버전에서 해당 컴포넌트를 새로 추가하는 것을 권장드립니다.


최신 버전 프로젝트에 배치한 모든 사용자 인터페이스 컴포넌트에 대해, 아래의 “변경된 이미지 속성 표”를 참고하여 Old 버전과 동일한 이미지가 적용되도록 폼 디자이너를 통해 설정합니다.

컴포넌트 | 변경된 이미지 속성 |
---|---|
Smart Button |
![]() ![]()
주의마스킹 처리가 안돼있는 버튼 이미지 사용 시 BackGround를 없음으로 사용하시기 바랍니다.
|
Smart Radio Button |
변경사항 없음 |
Smart Draw |
![]() ![]() |
Smart ListBox |
리스트박스 내부에 Scroll Up, Down 버튼이 추가되었습니다.
![]() ![]() |
Smart Combo Box |
![]() ![]() |
Smart UpDown |
배경 이미지를 설정하는 속성 삭제되었습니다. ![]() ![]() |
Smart Group Box |
![]() ![]() |
폼 디자이너에서는 복사 여부와 관계없이, 최신 버전의 모든 컴포넌트에 대해 Old 버전과 동일하게 속성을 재설정해야 합니다. 자세한 내용은 아래 “컴포넌트별 공통 변경 사항 표”를 참고해주시기 바랍니다.
또한, 컴포넌트를 복사해서 사용할 경우 추가로 설정이 필요한 항목이 있으니, 해당 내용은 아래 "사용자 인터페이스 컴포넌트를 복사할 경우 재설정해야 하는 주요 속성 표" 를 확인하시기 바랍니다.

설명 | 공통 변경 사항 |
---|---|
투명 효과 처리를 위한 배경 컴포넌트 설정 속성 통합 |
![]() |
컴포넌트 배경 색상 설정 속성 이름 변경 |
![]() |
컴포넌트 | 폼 디자이너에서 재설정해야 하는 주요 속성 |
---|---|
Smart Form |
복사 불가능 |
Smart InnerForm |
복사 불가능 |
Smart Label |
BackGround, BackGroundColor, TextColor |
Smart Button |
ButtonImage, BackGround, ButtonText
주의마스킹 처리가 안돼있는 버튼 이미지 사용 시 BackGround를 없음으로 사용하시길 바랍니다.
|
Smart Radio Button |
TextColor, RadioOutlineColor |
Smart Check Box |
TextColor |
Smart List Box |
SmartButton 삭제(기존에는 SmartButton을 사용하여 항목을 스크롤 했지만 ScrollBar속성으로 대체 되었습니다.), BackGroundColor, BorderStyle, ScrollBar 속성 |
Smart Combo Box |
ButtonImage, BackGround, BackGroundColor, ItemList의 BackGround, scrollButtonImage, DropDownButtonWidth 드롭다운박스 버튼의 가로는 DropDownButtonWidth, 세로는 ComboBox의 Size를 변경해서 맞춥니다. 리스트박스의 업다운 버튼 넓이 변경 시 ScrollButtonWidth를 변경 해야합니다. |
Smart UpDown |
(기존의 SmartUpDown 자체의 BackImage 설정은 삭제 되었으며 배경이 되는 컴포넌트에 이미지를 삽입 하고 BackGround 설정을 통해 배경을 적용해야 합니다.) LayoutStyle 설정→ UpDownButton의 이미지를 삽입 후 UpDownButtonSize를 조절하여 크기 맞추기→ Location 속성을 이용해 Button위치조정 → TextLocation, Text H,V Align속성을 통해 Text의 위치 조정 → BackGround, BorderStyle, Maximum, Minimum 설정 |
Smart Group Box |
BackImage |
Smart Key board |
RoundRectFillColor, KeyTextColor, KeyTextFont, KeyPressFill, Outline, Text Color |
Smart Key Pad |
복사 불가능 |
Smart Draw |
SmartDraw의 SetBackImage 속성이 삭제되어 단순 이미지를 적용하는 컴포넌트인 SmarPictureBox로 대체 되었습니다. 그 외의 Draw 기능은 사용 가능합니다. |
Smart Progress Bar |
변경점X |
Smart TrackBar |
StepRange |
5. 코드 이전 및 각 컴포넌트 별 변경 사항
-
[STEP-1] Old Ver. 프로젝트에서 해당 Form 파일을 열고, 전체 코드를 복사합니다.
Form 파일은 일반적으로 ___Form.cs, ___Form.Designer.cs, ___Form.resx로 구성되며, 이 단계에서는 ___Form.cs 파일의 소스코드만 복사합니다. -
[STEP-2] 새 프로젝트에서 Old 버전과 동일한 Form 파일에 복사한 소스코드를 그대로 붙여넣습니다.
소스 코드 복사 시 물리적인 폼 파일 하나씩 붙여넣은 후 수정하는 것을 권장드립니다. 메서드나 함수 단위로 나눠서 이전하는 경우, 호출 관계가 꼬이거나 일부 코드 누락 등의 문제가 발생할 수 있으므로 전체 코드를 한 번에 복사 붙여넣은 후 수정하는 방식이 효율적입니다.주의프로젝트를 생성할 때는 원본 프로젝트와 다른 이름(네임스페이스)으로 생성되는 경우가 많습니다. 이 경우, 네임스페이스가 달라 충돌이 발생할 수 있으므로 반드시 기존 소스코드에서 namespace 구문을 기준으로 본문과 상단의 using 지시문(외부 라이브러리 포함)을 복사하여 사용해 주세요. - [STEP-3] 코드 이전 후 발생하는 문법적 오류는, 아래 표 컴포넌트별 변경 사항을 참고해 수정합니다.

→ 사용한 컨트롤의 속성 또는 메서드가 삭제 되었거나 이름이 변경된 경우
2. ~ 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는 지 확인하십시오.
→ 관련 클래스나 네임스페이스가 변경된 경우
→ 해당 멤버가 인스턴스 방식에서 static 방식으로 변경된 경우 (호출 방식 변경)
3. ~ 멤버는 인스턴스 참조를 사용하여 액세스할 수 없습니다. 대신 형식 이름을 사용하여 한정하십시오.
→ 해당 멤버가 인스턴스 방식에서 static 방식으로 변경된 경우 (호출 방식 변경)
4. ~ 에 ~에 대한 정의가 없고 ~ 형식의 첫 번째 인수를 허용하는 확장 메서드 ~이 없습니다. using 지시문 또는 어셈블리참조가 있는 지 확인하십시오.
→ 기존 메서드와 바뀐 메서드의 매개변수, 타입이 일치하지 않은 경우
→ 사용한 컨트롤의 속성 또는 메서드가 삭제되었거나 이름이 변경된 경우
위 작업 중 문제가 발생하거나 진행에 어려움이 있는 경우, 전화 또는 이메일로 문의해 주시면 담당자가 확인 후 상세히 안내해드리겠습니다. 요청하실 경우 원격 지원도 가능합니다.
[기술문의] 070-7094-5001/5002 [E-Mail] app@smartx.co.kr
-
[STEP-4] 코드 부분이 모두 수정된 후, 디자인 부분으로 돌아가서 각 컴포넌트별로 알맞는 이벤트를 연결합니다.
연결 시 변경된 이벤트는 아래 표를 참고하여 수정합니다.
-
1) Old 버전 컴포넌트의 이벤트 이름확인
-
2) New 버전 컴포넌트에서 동일한 명의 이벤트 찾기
-
3) New 버전 컴포넌트 이벤트 연결확인
컴포넌트 | 변경된 이벤트 |
---|---|
SmartForm | 속성명 변경 : OnTouchVerified → OnTouchVeriedFailed |
SmartUpDown | 속성명 변경 : OnDecButClick, OnIncButClick → OnDownButtonClick, OnUpButtonClick |
SmartKeyPad, SmartKeyboard |
이벤트 연결 변경 : SmartKeyPad의 OnLabelKeyDown -> SmartLabel의 KeyPress 이벤트로 변경. 내부 코드 동일하게 사용 가능. (최신버전 SmartKeyPad의 OnLabelKeyDown 는 SmartLabel이 아닌 일반 Label을 위한 이벤트로 변경되었습니다.) |
SmartGPIO | 속성명 변경 : EvtPort+포트 번호(A~H)+DatasChange → OnPortDatasChange EvtPort+포트 번호(A~H)+DatasChangeCapture → OnPortDatasChangeCapture |
컴포넌트 | 변경된 이벤트 |
---|---|
Smart Form |
속성명 변경 OnTouchVerified → OnTouchVeriedFailed |
Smart UpDown |
속성명 변경 OnDecButClick, OnIncButClick → OnDownButtonClick, OnUpButtonClick |
Smart KeyPad, Smart Keyboard |
이벤트 연결 변경 SmartKeyPad의 OnLabelKeyDown → SmartLabel의 KeyPress 이벤트로 변경. 내부 코드 동일하게 사용 가능. (최신버전 SmartKeyPad의 OnLabelKeyDown 는 SmartLabel이 아닌 일반 Label을 위한 이벤트로 변경되었습니다.) |
Smart GPIO |
속성명 변경 EvtPort+포트 번호(A~H)+DatasChange → OnPortDatasChange EvtPort+포트 번호(A~H)+DatasChangeCapture → OnPortDatasChangeCapture |
6. 프로젝트 빌드 및 기능 테스트
마이그레이션 작업이 끝난 후 반드시 제품 연동 후 기능 검증을 합니다.
위 작업 중 문제가 발생하거나 진행에 어려움이 있는 경우, 전화 또는 이메일로 문의해 주시면 담당자가 확인 후 상세히 안내해드리겠습니다. 요청하실 경우 원격 지원도 가능합니다.
[기술문의] 070-7094-5001/5002 [E-Mail] app@smartx.co.kr
홈페이지(www.smartx.co.kr) > HOME > 설치 파일(중반부 위치) > SmartX Framework 다운로드
TechNote 83. SmartImageChecker를 사용하기 위해 이미지를 취합하는 방법홈페이지(www.hnsts.co.kr) > 자료실 > TechNote > TechNote 83. SmartImageChecker를 사용하기 위해 이미지를 취합하는 방법 > 7. 프로젝트에 사용된 모든 이미지를 취합해 SmartImageChecker로 검사하는 방법