[Windows Forms 응용 with C#] 4.4.3 자세히 보기 Form 구현

프로젝트에 VerifyForm을 추가하고 자식 컨트롤을 배치합니다. VerifyForm에는 도서 목록을 항목으로 표시하는 ComboBox 컨트롤과 선택한 도서의 정보를 표시할 컨트롤로 PictureBox 컨트롤, DateTimePicker 컨트롤 TextBox 컨트롤을 배치합니다.

[그림 4.8] VerifyForm 자식 컨트롤 배치
NoName컨트롤 형식설명
1cbox_noComboBox도서 목록
2tbox_titleTextBox도서 제목(ReadOnly:True)
3tbox_descriptionTextBox설명(ReadOnly:True)
4pb_imagePictureBox이미지(SizeMode: StretchImage)
5dtp_dateDateTimePicker날짜 선택 및 표시

디폴트 이미지 파일명을 상수로 정의하세요.

const string def_imagename = @"Resources\default.jpg";

이미지 이름 멤버를 선언하고 디폴트 이미지 이름으로 초기화합니다.

string imagename = def_imagename;

도서 관리자 단일체를 사용하기 편하게 속성을 정의합니다. 가져오기에서는  BookManager 클래스의 정적 멤버 BM을 그대로 By Pass 합니다.

BookManager BM
{
    get
    {
        return BookManager.BM;
    }
}

VerifyForm의 Load 이벤트 핸들러를 등록합니다.

private void ModifyForm_Load(object sender, EventArgs e)
{

pb_image의 ImageLocation 속성을 디폴트 이미지 파일명으로 설정합니다.

    pb_image.ImageLocation = def_imagename;

도서 관리자 개체에게 도서 목록을 요청하여 도서 목록을 ComboBox 컨트롤에 항목 추가합니다.

    List<BookStory> bsl = BM.GetBSCollection();

    foreach (BookStory bs in bsl)
    {
        cbox_no.Items.Add(bs);

    }

도서 추가 이벤트 핸들러를 도서 관리자에 등록합니다.

    BM.OnAddBS += BM_OnAddBS;
}

private void BM_OnAddBS(object sender, AddEventArgs e)
{

도서 추가 이벤트 핸들러에서는 이벤트 인자의 도서 개체를 ComboBox 항목에 추가합니다.

    cbox_no.Items.Add(e.BS);
}

ComboBox 컨트롤의 SelectedIndexChanged 이벤트 핸들러를 등록합니다.

private void cbox_no_SelectedIndexChanged(object sender, EventArgs e)
{

선택 항목이 없으면 이벤트 핸들러를 종료합니다.

    if(cbox_no.SelectedIndex == -1)
    {
        return;
    }

선택 항목을 도서 개체로 참조한 후에 컨트롤 속성을 설정합니다.

    BookStory bs = cbox_no.SelectedItem as BookStory;
    tbox_title.Text = bs.Title;
    tbox_description.Text = bs.Description;
    pb_image.ImageLocation = bs.ImageName;
    dtp_date.Value = bs.DT;
}

▷ VerifyForm.cs

//VerifyForm.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace MyReadingStory
{
    public partial class VerifyForm : Form
    {
        BookManager BM
        {
            get
            {
                return BookManager.BM;
            }
        }
        const string def_imagename = @"Resources\default.jpg";
        string imagename = def_imagename;
        public VerifyForm()
        {
            InitializeComponent();
        }

        private void VerifyForm_Load(object sender, EventArgs e)
        {
            pb_image.ImageLocation = def_imagename;
            List<BookStory> bsl = BM.GetBSCollection();
            foreach (BookStory bs in bsl)
            {
                cbox_no.Items.Add(bs);
            }
            BM.OnAddBS += BM_OnAddBS;
        }

        private void BM_OnAddBS(object sender, AddEventArgs e)
        {
            cbox_no.Items.Add(e.BS);
        }
        
        private void cbox_no_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(cbox_no.SelectedIndex == -1)
            {
                return;
            }
            BookStory bs = cbox_no.SelectedItem as BookStory;
            tbox_title.Text = bs.Title;
            tbox_description.Text = bs.Description;
            pb_image.ImageLocation = bs.ImageName;
            dtp_date.Value = bs.DT;
        }
    }
}