프로젝트에 ModifyForm을 추가하고 자식 컨트롤을 배치합니다. ModifyForm에는 도서 목록을 항목으로 표시하는 ListView 컨트롤과 선택한 도서의 정보를 표시할 컨트롤로 PictureBox 컨트롤, DateTimePicker 컨트롤 TextBox 컨트롤을 배치합니다. 그리고 이미지를 변경할 때와 변경 및 취소할 때 사용할 Button 컨트롤을 배치합니다.
다음은 ModifyForm의 자식 컨트롤 Name과 형식입니다.
No | Name | 컨트롤 형식 | 설명 |
1 | lv_diary | ListView | 도서 목록(View: Details) |
2 | pb_image | PictureBox | 이미지(SizeMode: StretchImage) |
3 | btn_image | Button | 이미지 선택 |
4 | dtp_date | DateTimePicker | 날짜 선택 및 표시 |
5 | tbox_description | TextBox | 설명 |
6 | btn_submit | Button | 변경 요청 |
7 | btn_cancel | Button | 취소 요청 |
디폴트 이미지 파일명을 상수로 정의하세요.
const string def_imagename = @"Resources\default.jpg";
이미지 이름 멤버를 선언하고 디폴트 이미지 이름으로 초기화합니다.
string imagename = def_imagename;
도서 관리자 단일체를 사용하기 편하게 속성을 정의합니다.
BookManager BM { get {
BookManager 클래스의 정적 멤버 BM을 그대로 By Pass 합니다.
return BookManager.BM; } }
ModifyForm의 Load 이벤트 핸들러를 등록합니다.
private void ModifyForm_Load(object sender, EventArgs e) {
pb_image의 ImageLocation 속성을 디폴트 이미지 파일명으로 설정합니다.
pb_image.ImageLocation = def_imagename;
도서 관리자 개체에게 도서 목록을 요청합니다. 그리고 도서 목록을 순차적으로 ListView에 추가합니다.
List<BookStory> bsl = BM.GetBSCollection(); foreach (BookStory bs in bsl) {
도서 일련 번호와 제목으로 문자열 배열을 만들고 이를 인자로 ListViewItem 개체를 생성합니다.
string[] subitems = new string[] { bs.No.ToString(), bs.Title }; ListViewItem lvi = new ListViewItem(subitems);
리스트 항목으로 생성한 ListViewItem 개체를 추가합니다.
lv_diary.Items.Add(lvi);
항목을 선택했을 때 도서 개체를 쉽게 참조할 수 있게 ListViewItem 개체의 Tag 속성에 설정합니다.
lvi.Tag = bs; } }
이미지 버튼의 클릭 이벤트 핸들러를 등록합니다.
private void btn_image_Click(object sender, EventArgs e) {
파일 열기 대화 상자를 열거 선택한 이미지로 설정합니다. 이 부분은 RegForm에서 했던 작업과 일치합니다.
OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "jpec 파일|*.jpg"; if (ofd.ShowDialog() == DialogResult.OK) { imagename = ofd.FileName; pb_image.ImageLocation = imagename; } }
리스트 뷰의 SelectedIndexChanged 이벤트 핸들러를 등록합니다.
private void lv_diary_SelectedIndexChanged(object sender, EventArgs e) {
선택 항목의 개수가 0이면 이벤트 핸들러를 종료합니다.
if (lv_diary.SelectedItems.Count == 0) { return; }
선택한 ListViewItem의 Tag 속성을 BookStory 형식 개체를 참조합니다.
BookStory bs = lv_diary.SelectedItems[0].Tag as BookStory;
선택한 도서 개체로 컨트롤의 속성을 설정합니다.
tbox_description.Text =bs.Description; pb_image.ImageLocation = bs.ImageName; dtp_date.Value = bs.DT; }
제출 버튼의 Click 이벤트 핸들러를 등록하세요.
private void btn_submit_Click(object sender, EventArgs e) {
선택 항목의 개수가 0이면 이벤트 핸들러를 종료합니다.
if (lv_diary.SelectedItems.Count == 0) { return; }
선택한 ListViewItem의 Tag 속성을 BookStory 형식 개체를 참조합니다.
BookStory bs = lv_diary.SelectedItems[0].Tag as BookStory;
도서 정보에 관한 컨트롤의 속성을 얻어와서 도서 관리자 개체에게 정보 변경을 요청합니다.
string description = tbox_description.Text; DateTime dt = dtp_date.Value; BM.ModifyBS(bs.No, description,imagename,dt); }
▷ ModifyForm.cs
using System; using System.Collections.Generic; using System.Windows.Forms; namespace MyReadingStory { /// <summary> /// 변경하기 폼 /// </summary> public partial class ModifyForm : Form { const string def_imagename = @"Resources\default.jpg"; string imagename = def_imagename; BookManager BM { get { return BookManager.BM; } } /// <summary> /// 생성자 /// </summary> public ModifyForm() { InitializeComponent(); } private void ModifyForm_Load(object sender, EventArgs e) { pb_image.ImageLocation = def_imagename; List<BookStory> bsl = BM.GetBSCollection(); foreach (BookStory bs in bsl) { string[] subitems = new string[] { bs.No.ToString(), bs.Title }; ListViewItem lvi = new ListViewItem(subitems); lv_diary.Items.Add(lvi); lvi.Tag = bs; } } private void btn_image_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "jpec 파일|*.jpg"; if (ofd.ShowDialog() == DialogResult.OK) { imagename = ofd.FileName; pb_image.ImageLocation = imagename; } } private void lv_diary_SelectedIndexChanged(object sender, EventArgs e) { if (lv_diary.SelectedItems.Count == 0) { return; } BookStory bs = lv_diary.SelectedItems[0].Tag as BookStory; tbox_description.Text =bs.Description; pb_image.ImageLocation = bs.ImageName; dtp_date.Value = bs.DT; } private void btn_submit_Click(object sender, EventArgs e) { if (lv_diary.SelectedItems.Count == 0) { return; } BookStory bs = lv_diary.SelectedItems[0].Tag as BookStory; string description = tbox_description.Text; DateTime dt = dtp_date.Value; BM.ModifyBS(bs.No, description,imagename,dt); } } }