JSFW.Designer] 만들다 보니...
만들다 보니 기존 컨트롤들을 거의다 구현이 끝났네.
# 가장 까다로운 레이아웃 그리드는 TableLayoutPanel로 다시 만들었다.
예전에 내가 만든 레이아웃그리드엔 꾀 많은 코드가 들어갔는데... TableLayoutPanel을 손봐서 만든건
코드 복잡도가 많이 줄었다. 잘 만들어져 있는 TableLayoutPanel의 기능들을 이용하는 것 뿐이니까!
동적으로 Cell Resize 처리를 하는게... 쉽지 않았다.
기존에 판넬 사이즈 변경이나 이동처리 하는 로직으로 안된다. 계속 비교는 해봤지만...
우연히 찾은 소스에서 설마!! 하고 적용했더니 되더라.. ㅡ.ㅡ; 그게 될줄이야...
# 데이타 그리드는 편집기능 판넬만 떼어다가 가져다 붙였다.
새로 구현하려니 너무 귀찮아서...
# 오늘 드디어 미친듯이 새로운걸 만들때마다 괴롭히던게 잡혔다.
에러 문구
---------------------------
Microsoft Visual Studio
---------------------------
'CellContent' 속성의 코드를 생성하지 못했습니다. 오류: ''JSFW.MockupIII, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 어셈블리의 'JSFW.Controls.MockupIII.mkLabel' 형식이 serializable로 표시되어 있지 않습니다.'
---------------------------
확인
---------------------------
에러 문구가 왜 뜨냐면...
mkLabel에 새 프로퍼티로 CellContent라는 걸 만드는데 class를 새로 정의한 것이었다.
이걸 mkLabel에 추가하고 Form 디자이너에 mkLabel을 드랍해두고 아무 프로퍼티나 수정을 하게 되면
프로퍼티내용을 직렬화 하는 과정에서 새로 만든 클래스 타입을 인식을 못하는것 같다.
실제 [Serializable] 걸어도 의미없다.
그렇게 삽질을 하다가 찾은게
[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
요거다. 직렬화 하지 말라는거... 프로퍼티위에서 걸어주면 form에서 직렬화 하지 않아서 에러 메세지가 나타나지 않는다.
하나의 어셈블리 파일로 만들꺼면 set을 internal로 걸면 또 직렬화 하지 않는다.
저 클래스의 용도가 .designer.cs에 소스코드로 보여질 내용이 아니므로 직렬화해서 관리하지 않아도 된다.
난 경우가 다르므로 꼭 직렬화를 피해야 한다. 다른 프로그램만들때 저런 에러가 나서 프로퍼티말고 Set, Get Method로 처리했던것 같은데...
어째든... 성공이다. 나중에 내부 데이타들을 모두 다른 dll로 뽑아내고 플러그인에 들어갈 객체로 써야 하므로 internal이면 안되기 때문에...
[System.ComponentModel.DesignOnly(true)] 요것도 있다.
.resx에 프로퍼티 직렬화되어 값을 보존하는 듯 하다. .designer.cs 소스로 생성되어 뿌려지지 않는다.
위 에러가 나타나서 해당 프로퍼티에 걸었더니 .resx에 형식이 (없음/null) 로 보이게 된다.
여기까지 만들어진 화면이다. ( 아래 레이어 mkLabel2는 테스트 도중 위치값이 바뀐경우라... 에러 아님.)
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
JSFW.Designer] 디자이너... 또 하나 더? (0) | 2017.01.04 |
---|---|
JSFW.Designer] UI까지... (0) | 2016.12.26 |
JSFW.Designer 또 한번 엎어볼까나??? (0) | 2016.12.19 |
화면정리 프로그램] 추가 기능 II ( 테스트 시나리오 ) (0) | 2016.12.13 |
화면정리 프로그램] 추가 기능. (0) | 2016.12.09 |