제작순서는 커스텀 컨트롤을 제공해줄 프로젝트 생성, 컨트롤을 테스트하기위한 프로젝트 생성, 제작한 컨트롤을 테스트하기위한 프로젝트에 참조시키는 과정을 끝내면 됩니다.
자 그럼 VS2003을 켜시고~
파일=> 새로만들기=>프로젝트=>VisualC#프로젝트=>템플릿에서 "ASP.NET웹 응용프로그램"을 선택해서 웹응용프로그램을 하나 만듭니다.
위치에는 기본적으로 제공되는 WebApplication1말고 "TestWebControl"이라고 바꾸어서 "확인"
다음 TestWebControl프로젝트에서 마우스오른쪽을 눌러서 "추가"=>"Web Form추가"를 사용해서 새 웹폼을 추가합니다. 이름은 "TestControl.aspx"로 하죠~
그다음
TestWebControl 솔루션에서 오른쪽 마우스를 눌러서 "추가"=>"새프로젝트"선택한 후
"Visual C# 프로젝트"의 템플릿에서 "클래스 라이브러리" 항목을 선택후
이름은 "CustomWebControl"로 지정 후 확인 누르세요~
이때 프로젝트가 저장되는 경로를 건드리지 않았습니다만 나중에는 본인이 원하는 위치로 지정해서 만들어도 좋겠죠~!
자 ~ 다음에는 방금 만든 프로젝트에 새로운 클래스를 하나 추가하도록 하겠습니다.
프로젝트에서 오른쪽 마우스 눌러.....(이젠 추가하는 정도는 생략하겠습니다.~^^; 혹시 모를 사람을 위해 간단하게 "추가"=>맨아래 "클래스 추가")
이름을 "LabelControl"이라고 하는 클래스를 추가하도록 하지요~
왜 LabelControl이냐면 닷넷에서 기본적으로 제공해주는 LABEL컨트롤의 기능중에서 Text라는 속성만 정해주면 그 글씨가 테그를 이용해서 랜더링 되게 해 줄 것이니깐요~(뭐 이런기능을 만들고 Xx이야 ~~ 이러실 분도 있겠지만 여기까지가 제 한계 입니다요~ㅋㅋ)
다시 본론으로 돌아가서 컨트롤 제작부분으로 가겠습니다.
여러분의 화면에는 빈 클래스 파일이 하나 열려있겠죠. 소스를 아래와 같이 수정해 보세요 설명은 이후에..
using System;
namespace CustomWebControl { /// /// LabelControl에 대한 요약 설명입니다. /// public class LabelControl : System.Web.UI.Control { public LabelControl() { // // TODO: 여기에 생성자 논리를 추가합니다. // } private string text;
public string Text { get{return this.text;} set{this.text = value;} }
먼저 컨트롤에서 사용할 text문자형 변수를 추가해 주고 외부에서 이 변수에 문자를 할 당해줄 수 있도록 Text속성을 정의 해 줍니다. 혹시 모르실까봐 덧붙히는데 객체지향프로그램에서 외부로 값을 설정또는 출력할 때 속성을 이용해서 하는 것이 정석입니다. 그리고 내부에서 사용하는 변수는 private 으로 캡슐화하는 것이지요. (자세한 내용은 C#에 관한 서적을 참고하시면 되겠습니다.)아무튼 어디선가 이 컨트롤에 값을 설정해야 하는데 설정하기 위한 구멍을 public string Text{}라는 속성을 정의해서 만들어 준것이고 컨트롤을 이렇게 받은 값을 내부적으로 사용하기 위해 private string text라는 변수에 담아 쓰겠다는 것이죠..또한 속성설정내부에는 값을 받기위해 set을 설정하고 외부에서 꺼내기 위해 get을 설정한다는 것이죠.~~에효~내머리도 아프다.~ㅡㅡ;
사실 객체지향적인 프로그램을 한 경험이 있는 사람이라면 정말 아무것도 아닌 것일 수 있겠습니다만. 정말 아무것도 모르는 초딩을 겨냥해서~~ㅠ.ㅠ
객체지향 프로그램에서는 당연히 프로그램을 객체단위로 쪼개서 제작한다음 이러한 객체들을 서로 연관되게 조립해서 하나의 프로그램을 제작하게 됩니다.
이때 하나의 A라는 객체와 B라는 객체가 있는데 B라는 객체는 A라는 객체의 기능에서 조그만 기능이 추가된 정도의 객체라고 가정해본다면 굳이 A라는 객체 기능에다가 기능을 추가해서 또다른 B라는 객체기능을 만들어 중복되는 코드를 생성할 필요없이 A라는 기능을 상속받아서 약간의 기능만 덮어서 재사용하면 좋을 것입니다. 이때 사용되는 키워드가 override라는 것이 있죠.
그냥 개념만 설명한 것이고 인터넷을 뒤져보면 보다 상세한 설명을 얻을 수 있지 않을까 하는 생각을 하면서 여기서 줄이고....
아무튼 빨간색 박스의 마지막에 override로 Render라는 메서드를 재정의 했습니다.
이것은 서버컨트롤에 virtual로 선언되어 있는 Render메서드를 재정의해서 사용하게끔 닷넷프레임웍이 정의해 놓은 것이죠..
혹시 궁금하시면 MSDN또한 참조해보시는 것도 아주아주 좋을 것 같다는 생각을 잠깐 해보고~~패스~!
전 이 메서드를 아주아주 복잡하지 않은 테그생성기능을 재정의 했습니다.
좀 허무하긴 하네요.
소스내용보시면 웃음이 나오실 만도 하겠네요. text변수 내용에 그냥 테그를 씌워서 문자열을 만들어 내는 .....^^;
자~~암튼 이렇게 해서 커스텀화 되어있는 서버컨트롤을 제작하였습니다~ㅋㅋ
(아참~! 빼 먹은 것이 있네요. 이런이런.....상단의 연두색으로 되어 있는 부분을 보시면 System.Web.UI.Control을 상속한 부분이 있는데요. 이것이 그냥 쓰면 인텔리센스가 작동되지 않습니다. 왜냐면 지금 작성하고 있는 프로젝트의 참조에다가 System.Web이라는 컴포넌트를 추가해주어야 하기 때문이죠..
그럼 추가해볼까요. 프로젝트에서 오른쪽 마우스=> 참조추가 => 열려있는 .NET텝 항목 아래로 내려가면 System.Web.dll이 있을 것입니다. 이것을 추가해주세요~....휴..아래 테스트 프로젝트 작성하다 말고 다시 올라와서 추가하는 것입니다~ㅡㅡ;)
다음은 또한 당근 이 컨트롤을 사용해봐야지요~
처음에 두개의 프로젝트를 생성했습니다.
지금까지 제작한 컨트롤을 위한 "CustomWebControl" 프로젝트와 이 컨트롤을 테스트 하기위한 "TestWebControl".
TestWebControl프로젝트 바로 아래에 있는 "참목"에서 오른쪽 마우스를 누르면 "참조 추가"가 나옵니다. 클릭~!
프로젝트 텝을 열면 지금 제작한 컨트롤이 보일 것입니다. 그럼 선택후 "확인"
조금전의 참조 항목 트리에 제작한 컨트롤이 추가된 것이 보일 것입니다.
확인한 후에 "TestControl.aspx"웹폼을 엽니다.
빈 화면을 더블클릭해서 폼로드 이벤트로 바로 가죠뭐~!
"// 여기에 사용자 코드를 배치하여 페이지를 초기화합니다."이부분을 지우고 코드를 작성해 봅니다.