랭커 예광탄을 만들어봅시다. 랭커 예광탄에서는 사용자가 검색 질의를 입력하여 검색 요청하면 검색 결과를 리스트 창에 보여주고 리스트 목록의 항목을 선택하면 이에 관한 세부 정보를 보여주는 형태로 작성합시다.
번호 | 컨트롤 이름 | 컨트롤 유형 | 설명 |
1 | lb_query_info | Label | 정보 표시 |
2 | tbox_query | TextBox | 질의 입력 창 |
3 | btn_search | Button | 검색 버튼 |
4 | lbox_plist | Label | 검색 결과 목록 |
5 | gb_detail | GroubBox | 상세 정보 그룹 박스 |
6 | lb_score_info | Label | 정보 표시 |
7 | lb_score | Label | 평가 점수 |
8 | lb_title_info | Label | 정보 표시 |
9 | lb_title | Label | 타이틀 |
10 | lb_paddr_info | Label | 정보 표시 |
11 | lb_paddr | Label | 수집한 웹 페이지 주소 |
12 | lb_oaddr_info | Label | 정보 표시 |
13 | lb_oaddr | Label | 수집 요청 웹 페이지 주소 |
14 | lb_depth_info | Label | 정보 표시 |
15 | lb_depth | Label | 상대적 깊이 |
16 | lb_date_info | Label | 정보 표시 |
17 | lb_date | Label | 수집한 일시 |
18 | lb_content_info | Label | 정보 표시 |
19 | tbox_content | TextBox | 웹 페이지 내용 |
[표 9.1] 랭커 예광탄 메인 폼의 자식 컨트롤
랭커 예광탄에서 만든 코드의 Ranker 클래스는 RankerLib로 다시 만들 부분이며 중복 기재없이 랭커 라이브러리 만들기에서 소스 설명을 할게요.
먼저 검색 요청 버튼 클릭 이벤트 핸들러를 추가합니다.
private void btn_search_Click(object sender, EventArgs e)
이벤트 핸들러에서는 정적 클래스 Ranker의 검색 요청 메서드를 통해 순위화 한 페이지 개체 컬렉션을 얻어옵니다. 그리고 얻어온 항목을 검사 결과 목록 창에 추가합니다.
List<RankedUrl> list = Ranker.Request(tbox_query.Text); foreach (RankedUrl rurl in list) { lbox_plist.Items.Add(rurl); }
검사 결과 목록의 선택 변경 이벤트 핸들러를 추가합니다.
private void lbox_plist_SelectedIndexChanged(object sender, EventArgs e)
이벤트 핸들러에서는 선택 항목이 없을 때에는 아무 작업없이 끝냅니다.
if (lbox_plist.SelectedIndex == -1) { return; }
선택한 항목을 순위화 한 페이지 개체로 참조합니다. 그리고 개체의 속성으로 컨트롤의 속성을 설정합니다.
RankedUrl rurl = lbox_plist.SelectedItem as RankedUrl; lb_score.Text = rurl.Score.ToString(); PostedUrl purl = rurl.PUrl; lb_title.Text = purl.Title; lb_paddr.Text = purl.Url; lb_oaddr.Text = purl.OriginUrl; lb_depth.Text = purl.Depth.ToString(); lb_date.Text = purl.PostedTime.ToString(); tbox_content.Text = purl.Content;
▷ MainForm.cs
using System; using System.Collections.Generic; using System.Windows.Forms; using WSE_Core; using RankerLib; namespace Ranker_예광탄 { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btn_search_Click(object sender, EventArgs e) { List<RankedUrl> list = Ranker.Request(tbox_query.Text); foreach (RankedUrl rurl in list) { lbox_plist.Items.Add(rurl); } } private void lbox_plist_SelectedIndexChanged(object sender, EventArgs e) { if (lbox_plist.SelectedIndex == -1) { return; } RankedUrl rurl = lbox_plist.SelectedItem as RankedUrl; lb_score.Text = rurl.Score.ToString(); PostedUrl purl = rurl.PUrl; lb_title.Text = purl.Title; lb_paddr.Text = purl.Url; lb_oaddr.Text = purl.OriginUrl; lb_depth.Text = purl.Depth.ToString(); lb_date.Text = purl.PostedTime.ToString(); tbox_content.Text = purl.Content; } } }