CustomTextBox
주석과 히스토리는 아래와 같다.그리고 3개의 특성(Attribute)가 지정되어 있다.
[소스코드]
/// <summary> /// Custom TextBox Ver 2.4 /// </summary> /// <remarks>Prototype - 네오프레임워크</remarks> /// <remarks>05.10.24 - 메소드 프라퍼티 이름 빼고 내용은 다 바꿈. - 방실</remarks> /// <remarks>06.05.03 - Framework 2.0 버전으로 변경 - 방실 </remarks> /// <remarks>06.05.12 - Mail 추가 - 방실</remarks> /// <remarks>06.06.01 - Value 프라퍼티 수정 - 방실</remarks> /// <remarks>06.07.11 - htc 파일 임베디드 리소스로 변경 - 방실</remarks> /// <remarks>06.07.19 - Preset에 DefaultUse, Jumin 추가, nextControl에 ClientID로 변경 - 방실</remarks> /// <remarks>06.08.11 - Text 프라퍼티 재정의(스크립트에서 Preset에 의해 값이 변경되지 않고 넘어 올 경우 이 프라퍼티에서 재 구성 한다.) - 방실</remarks> [ToolboxData("<{0}:ExTextBox runat=server ></{0}:ExTextBox>")] [Designer(typeof(System.Web.UI.Design.TextControlDesigner))] [DefaultProperty("ID")] |
이번 버전에서 새로 나온..아주 맘에 드는 부분이다.
파일을 어셈블리에 리소스로 임베디드 하는 내용이다..
아랫 부분은 htc파일을 임베디드 하는 부분인데.
WebResourceAttribute의 첫번째 필수 매개변수는 리소스 파일의 경로이며 두번째 매개변수는 MIME 코드이다.
htc파일의 경우 이 MIME 코드가 뭔지 몰라서 고생했다..
이것을 정성태님이 도와 주셨다..(열심히 서핑해서 찾아 주신것..ㅡ.ㅡ;)
아래는 정성태님 토픽 url
보러가기
[소스코드]
[assembly: WebResource("BIT.Web.CustomControls.Resources.control.htc", "text/x-component")] |
이 TextBox에 대해서 간략히 설명 하자면..
Preset이라는 프라퍼티가 있으며 이 프라퍼티에서 설정된 Mask대로 htc파일에서 onBlur() 이벤트에서 작동한다.
이게 가장 큰...기능이다..ㅡ.ㅡ;
추 .. 임베디드 되는 리소스 파일은 꼭 속성에서 임베디드라고 저장해야 한다..
이거 간단한거지만..자꾸 까먹는다는..ㅡ.ㅡ;
그래서 코드를 보게 되면
Preset을 사용하게 되면
htc파일을 로드 하게 된다.
[소스코드]
if (this.Preset != Preset.None) { writer.AddAttribute("style", "behavior:url('" + Page.ClientScript.GetWebResourceUrl(this.GetType(), "BIT.Web.CustomControls.Resources.control.htc") + "')"); writer.AddAttribute("preset", this.Preset.ToString()); } |
많은 초보분들이 착각하는게 있는데..
html에서 Attribute라는 기능에 대해서 착각을 한다..
어트리뷰트는 흠..뭐랄까 일시적인 데이터 저장소라고 해야 할까?
특정 태그에 사용자가 임의대로 어떠한 값을 특정 어트리뷰트를 생성해서 저장 할 수가 있다..
이는 물론 스크립트에서 마음대로 사용 할 수가 있다.
예를 들어 컨트롤에서 MinLength속성 설정을 10으로 변경 하였다면..
렌더링시 해당 텍스트박스 태그에 minLength=10 이라고 렌더링 된다.
이는 아래 코드가 렌더링되기 때문이다.
[소스코드]
//최소길이보다 큰가? if (this.minLength > 0) { writer.AddAttribute("minLength", this.minLength.ToString()); } |
이렇게 렌더링 되는 코드들은
처음에 언급했듯이
onBlur()이벤트가 발생하면 htc파일에 정의되어 있는 preset 속성의 값에 따라 작동한다.
htc파일은..정말..복잡하다..ㅡ.ㅡ;
알아서 살펴 보도록...머리 아프다..@.@
컨트롤에서 제공되는 프라퍼티들은 주석이 상세히(??) 달려 있으니 설명을 생략 한다.
Text와 Value라는 프라퍼티만 잠깐 언급을 하겠다.
Preset을 사용하게 되면 그 설정에 맞게 텍스트 박스의 입력값이 변경된다.
예를 들면..날짜 포맷의 경우.
사용자가 숫자 8자를 입력하게 되면
htc파일은 이를 yyyy-MM-dd 포맷으로 변경시킨다.
그러나 프로그램은 변경된 값과 사용자가 입력시킨 값을 알아야 한다..
그래서 만든 프라퍼티가 Value이며 쌍으로 Text역시 재정의 했다.
프라퍼티 내용이 조금 복잡해 보인듯 하나...별로 복잡할 것도 없다..
Text와 Value의 형식을 맞춰주는 작없을 하는 것 뿐이다.
그리고 사용자가 실제로 입력한 값은 realValue라는 어트리뷰트로 렌더링 된다.
그리고 별로 설명할 만한 것이 없고 코드가 뻔히 보여서..
※ 구현환경
.NET Framework 2.0
Microsoft Visual Studio.NET 2005
Microsoft Windows XP SP2