9. 1 랭커 예광탄 만들기

랭커 예광탄을 만들어봅시다. 랭커 예광탄에서는 사용자가 검색 질의를 입력하여 검색 요청하면 검색 결과를 리스트 창에 보여주고 리스트 목록의 항목을 선택하면 이에 관한 세부 정보를 보여주는 형태로 작성합시다.

랭커 예광탄 메인 폼 자식 컨트롤 배치
[그림 9.1] 랭커 예광탄 메인 폼 자식 컨트롤 배치
번호컨트롤 이름컨트롤 유형설명
1lb_query_infoLabel정보 표시
2tbox_queryTextBox질의 입력 창
3btn_searchButton검색 버튼
4lbox_plistLabel검색 결과 목록
5gb_detailGroubBox상세 정보 그룹 박스
6lb_score_infoLabel정보 표시
7lb_scoreLabel평가 점수
8lb_title_infoLabel정보 표시
9lb_titleLabel타이틀
10lb_paddr_infoLabel정보 표시
11lb_paddrLabel수집한 웹 페이지 주소
12lb_oaddr_infoLabel정보 표시
13lb_oaddrLabel수집 요청 웹 페이지 주소
14lb_depth_infoLabel정보 표시
15lb_depthLabel상대적 깊이
16lb_date_infoLabel정보 표시
17lb_dateLabel수집한 일시
18lb_content_infoLabel정보 표시
19tbox_contentTextBox웹 페이지 내용

[표 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;
        }
    }
}