티스토리 뷰
우리는 전편에서 이벤트의 간략한 소개와 예제를 통해 이벤트의 사용 방법을 익혀보았습니다. 이번편 부터는 이벤트를 활용할 수 있는 예제들을 중심으로 소개하려고 합니다. 아마 그동안 이벤트가 뭉게구름처럼 정확하게 머리 속에 그려지지 않았다면, 이번 예제들을 통해 확실히 이벤트의 개념에 대해 알 수 있을 것 같습니다.
유저컨트롤에서 페이지로 값 전달
1편에서 선언부와 구현부의 분리로 점차적으로 프로그램을 보다 융통성 있게 만들 수 있다고 하였습니다. 페이지로 값을 이벤트를 통해 전달하는 방법을 살펴보겠습니다.
우선 우리가 사용할 이벤트 인자를 넘길 ReceiveEventArgs 클래스를 만들 것입니다. 이 ReceiveEventArgs 는 이벤트가 발생할 때 이벤트가 전달하는 Argument(인자)를 전달받을 수 있기 위함입니다.
받을 인자는 간단한 string 값으로 하겠습니다.
ReceiveEventArgs.cs
public class ReceiveEventArgs : EventArgs
{
public string Item { get; set; }
} |
유저컨트롤을 만들기 전에 UserControlBase 를 만들 것입니다. 이 UserControlBase 에는 기본적인 델리게이트와 이벤트를 선언하고 이벤트를 발생시키는 메서드가 포함이 됩니다.
public delegate void ReceiveEventHandler(object sender, ReceiveEventArgs e);
public class UserControlBase : System.Web.UI.UserControl
{
public event ReceiveEventHandler ReceiveEvent;
protected void OnRecevieEvent(object sender, ReceiveEventArgs e)
{
if( ReceiveEvent != null )
ReceiveEvent( sender, e);
}
} |
복잡하게 생각할 것 없이, 1편에서 보던 간략한 예제를 클래스 별로 분리하였다고 보시면 됩니다.
그럼 이제 유저컨트롤을 만들어 보겠습니다. 유저컨트롤에는 RadioButtonList 를 두고 아이템을 선택 후 전달 버튼을 누르면 이벤트를 발생하는 부분이 포함될 것입니다.
WebUserControl1.ascx.cs
public partial class WebUserControl1 : UserControlBase
{
protected void Page_Load(object sender, EventArgs e) { }
protected void Button1_Click(object sender, EventArgs e)
{
OnRecevieEvent(sender,
new ReceiveEventArgs{ Item=RadioButtonList1.SelectedItem.Text });
}
} |
보시는 것과 같이 버튼을 클릭하였을 때, OnReceiveEvent 를 발생하는 메서드를 호출하여 RadioButtonList 에서 선택된 아이템의 텍스트를 인자 값으로 전달합니다.
이제 default.aspx.cs 를 만들어 보겠습니다. 여기의 코드도 무척 심플하네요.
Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.ucWebUserControl1.ReceiveEvent +=
new ReceiveEventHandler(ucWebUserControl1_ReceiveEvent);
}
void ucWebUserControl1_ReceiveEvent(object sender, ReceiveEventArgs e)
{
string msg = string.Format("선택된아이템은 {0} 입니다",e.Item);
lbl.Text = msg;
}
} |
결과 화면을 보겠습니다.
글 만으로 잘 이해가 안되시면 첨부 파일을 다운로드 하여 한번 살펴보시면 좋을 것 같습니다.
'.NET > C#' 카테고리의 다른 글
실전 event [4] - 취소 가능한 이벤트 만들기 (0) | 2007.12.17 |
---|---|
실전 event [3] - 취소 가능한 이벤트란 (0) | 2007.12.17 |
실전 event [1] - 이벤트 시작하기 (0) | 2007.12.16 |
[C# 3.0] LINQ to Sql 의 쿼리를 로그로 남겨보자 (0) | 2007.12.04 |
LINQ QUIZ (0) | 2007.11.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- 2,841,738
- Today
- 3
- Yesterday
- 47
링크
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
TAG
- umc
- Silverlight
- 엄준일
- testing
- ALM
- Visual Studio 11
- 비주얼 스튜디오 2010
- TFS
- MEF
- Visual Studio
- POWERUMC
- 팀 파운데이션 서버
- Team Foundation Server
- test
- Visual Studio 2010
- c#
- github
- LINQ
- .NET Framework 4.0
- 비주얼 스튜디오
- ASP.NET
- 땡초
- Managed Extensibility Framework
- mono
- .NET
- monodevelop
- Team Foundation Server 2010
- TFS 2010
- Visual Studio 2008
- Windows 8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
글 보관함
- 2020/05 (1)
- 2019/10 (3)
- 2018/11 (1)
- 2018/08 (2)
- 2017/04 (1)
- 2017/01 (2)
- 2016/11 (2)
- 2016/08 (1)
- 2016/05 (1)
- 2016/04 (2)
- 2016/02 (2)
- 2016/01 (1)
- 2015/05 (1)
- 2015/04 (2)
- 2015/03 (1)
- 2015/02 (1)
- 2015/01 (1)
- 2014/11 (1)
- 2014/09 (2)
- 2014/08 (2)
- 2014/05 (2)
- 2014/04 (3)
- 2014/03 (2)
- 2014/02 (2)
- 2014/01 (4)
- 2013/12 (2)
- 2013/11 (1)
- 2013/10 (2)
- 2013/09 (6)
- 2013/08 (3)