1 / 32

9 장 마무리 15~18 절

9 장 마무리 15~18 절. Made by Yoon. Contents. Section 15. 드래그 앤 드롭 , 클립보드 Section 16. 트리뷰와 리스트뷰 그리고 스 플리터 Section 17. 사용자 지정 컨트롤 작성하기 Section 18. GDI+ 고급 활용. 15 절 . 드래그 앤 드롭 , 클립보드. 드래그 앤 드롭 (1). 개념 기본셋팅 – 616p 이벤트 4 가지 – 616p 이벤트 사용법 – 619p. 드래그 앤 드롭 (2). 9-15-1 예제

semah
Download Presentation

9 장 마무리 15~18 절

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 9장 마무리 15~18절 Made by Yoon

  2. Contents • Section 15. 드래그 앤 드롭, 클립보드 • Section 16. 트리뷰와 리스트뷰 그리고 스 플리터 • Section 17. 사용자 지정 컨트롤 작성하기 • Section 18. GDI+ 고급 활용

  3. 15절. 드래그 앤 드롭, 클립보드

  4. 드래그 앤 드롭(1) • 개념 • 기본셋팅 – 616p • 이벤트 4가지 – 616p • 이벤트 사용법 – 619p

  5. 드래그 앤 드롭(2) • 9-15-1 예제 • 문제점 : 윈도우의 일반적인 text 파일의 형태에서 한글이 들어간 부분은 인식 못함

  6. 드래그 앤 드롭(3) • 9-15-1 소스 분석 public Form1() { InitializeComponent(); this.AllowDrop = true; // 폼 드롭 기능 활성화 this.txt_box.AllowDrop = true; // TextBox 드롭 기능 활성화 this.txt_box.DragOver += new DragEventHandler(txt_box_DragOver); this.txt_box.DragDrop += new DragEventHandler(txt_box_DragDrop); this.rich_txt_box.AllowDrop = true; // RichTextBox 드롭 기능 활성화 this.rich_txt_box.DragEnter += new DragEventHandler(rich_txt_box_DragEnter); this.rich_txt_box.DragDrop += new DragEventHandler(rich_txt_box_DragDrop); this.DragOver += new DragEventHandler(pic_box_DragOver); //DragOver 이벤트 this.DragDrop += new DragEventHandler(pic_box_DragDrop); //DragDrop 이벤트 }

  7. 드래그 앤 드롭(4) • 9-15-1 소스 분석 void txt_box_DragOver(object sender, DragEventArgs dea) { if (dea.Data.GetDataPresent(DataFormats.FileDrop) || dea.Data.GetDataPresent(DataFormats.StringFormat)) { if ((dea.AllowedEffect & DragDropEffects.Move) != 0) dea.Effect = DragDropEffects.Move; if(((dea.AllowedEffect & DragDropEffects.Copy) != 0) && ((dea.KeyState & 8) != 0)) dea.Effect = DragDropEffects.Copy; } } void txt_box_DragDrop(object sender, DragEventArgs dea) { if (dea.Data.GetDataPresent(DataFormats.FileDrop)) { string[] fname = (string[])dea.Data.GetData(DataFormats.FileDrop); TextReader tr = new StreamReader(fname[0]); txt_box.Text = tr.ReadToEnd(); tr.Close(); } }

  8. 클립보드(1) • 개념 • 다양한 메서드 – 620p • 모두 static 형태로 바로 사용 가능

  9. 클립보드(2) • 9-15-2 예제

  10. 클립보드(3) • 9-15-2 소스 분석 if (Clipboard.ContainsText()) { txt_info.AppendText("3. 텍스트 포함되어 있음...\r\n"); btn_addText.Enabled = true; btn_getText.Enabled = true; } else { txt_info.AppendText("3. 텍스트 포함되지 않음...\r\n"); btn_addText.Enabled = true; } private void btn_addText_Click(object sender, EventArgs e) { Clipboard.SetText("클립보드에 문자열을 추가합니다."); txt_info.AppendText("클립보드에 문자열 추가...\r\n"); } private void btn_getText_Click(object sender, EventArgs e) { if (Clipboard.ContainsText()) MessageBox.Show(Clipboard.GetText());Clipboard. }

  11. 9-15-3 예제

  12. 9-15-3 소스 분석 private void btn_addTime_Click(object sender, EventArgs e) { DateTime date = DateTime.Now; Clipboard.SetData("날짜시간", date); } private void btn_getTime_Click(object sender, EventArgs e) { if (Clipboard.ContainsData("날짜시간")) { DateTime date = (DateTime)Clipboard.GetData("날짜시간"); Graphics grfx = this.panel1.CreateGraphics(); grfx.DrawString(date.ToLongDateString(), this.Font, Brushes.Yellow, 20, 30); grfx.DrawString(date.ToLongTimeString(), this.Font, Brushes.Orange, 20, 50); } }

  13. 16절. 트리뷰와 리스트뷰 그리고 스플리터

  14. 트리뷰(1) • 개념 – 626p • TreeView : 전체 틀 • TreeNode : 각각의 노드 • TreeNodeCollection : 노드 관리 • 메서드 – 626~627p

  15. 트리뷰(2) • 9-16-1 예제

  16. 트리뷰(3) • 9-16-1 소스 분석 TreeView tree = new TreeView(); tree.Parent = this; tree.Dock = DockStyle.Fill; tree.Nodes.Add("대한민국"); tree.Nodes[0].Nodes.Add("서울시"); tree.Nodes[0].Nodes[0].Nodes.Add("종로구"); tree.Nodes[0].Nodes[0].Nodes.Add("광진구"); tree.Nodes[0].Nodes[0].Nodes.Add("강남구"); tree.Nodes[0].Nodes.Add("경기도"); tree.Nodes[0].Nodes[1].Nodes.Add("수원시"); tree.Nodes[0].Nodes[1].Nodes.Add("가평군"); tree.Nodes.Add("미국"); tree.Nodes[1].Nodes.Add("캘리포니아주"); tree.Nodes[1].Nodes[0].Nodes.Add("LA"); tree.Nodes[1].Nodes.Add("뉴욕주");

  17. 트리뷰(4) • 9-16-2 예제

  18. 트리뷰(5) • 9-16-2 소스 분석 tree.AfterSelect += new TreeViewEventHandler(tree_AfterSelect); private void tree_AfterSelect(object sender, TreeViewEventArgs tea) { if (tea.Action != TreeViewAction.Unknown) { tea.Node.Checked = (tea.Node.Checked) ? false : true; this.Text = "현재 선택한 목록 : " + tea.Node.Text; } }

  19. 리스트뷰(1) • 개념 • 이벤트 처리 – 634p • 9-16-4 예제

  20. 리스트뷰(2) • 9-16-4 소스 분석 ListView lst = null; lst = new ListView(); lst.Parent = this; lst.Dock = DockStyle.Fill; lst.TabIndex = 0; lst.View = View.Details; lst.HideSelection = false; lst.HeaderStyle = ColumnHeaderStyle.Nonclickable; lst.SmallImageList = small_img; lst.LargeImageList = large_img; lst.SelectedIndexChanged += new EventHandler(lst_SelectedIndexChanged); ColumnHeader columnHeader1 = new ColumnHeader(); columnHeader1.Text = "국가"; columnHeader1.TextAlign = HorizontalAlignment.Left; columnHeader1.Width = 70; lst.Columns.Add(columnHeader1); ListViewItem lvi_korea = new ListViewItem("대한민국"); lvi_korea.ImageIndex = 0; lvi_korea.SubItems.Add("서울"); lvi_korea.SubItems.Add("아시아"); lst.Items.Add(lvi_korea);

  21. 스플리터(1) • 개념 • Splitter 컨트롤 vs SplitContainer 컨트롤 • Splitter 컨트롤 • 예) • 3개의 컨트롤 생성후.. • this.Controls.AddRange(new Control[]{listView, splitter, treeView); • SplitContainer 컨트롤 • 3개의 컨트롤 생성후.. • splitContainer.Panel1.Controls.Add(treeView); • splitContainer.Panel2.Controls.Add(listView); • This.Controls.Add(splitContainer);

  22. 파일 탐색기 만들기

  23. 17절. 사용자 지정 컨트롤 작성하기

  24. 사용자 지정 컨트롤 만들기(1) • 9-17-1 예제

  25. 사용자 지정 컨트롤 만들기(2) • 9-17-1 소스 분석 namespace MyButton { public class RainbowButton : System.Windows.Forms.Button { Color [] colors = { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Magenta, Color.Violet }; protected override void OnPaint(PaintEventArgs pea) { base.OnPaint(pea); Graphics grfx = pea.Graphics; for(int i = 0 ; i < 7; i++) { grfx.FillRectangle(new SolidBrush(colors[i]), 20, 20+10*i, 10, 10); } } } }

  26. 사용자 지정 컨트롤 만들기(3) • 9-17-4 예제 • 사용자 정의 버튼에서는 선택 윤곽이 나타나지 않음!

  27. 사용자 지정 컨트롤 만들기(4) • 9-17-4 소스 분석 class RoundButton : Button { protected override void OnResize(EventArgs e) { base.OnResize(e); GraphicsPath path = new GraphicsPath(); path.AddEllipse(this.ClientRectangle); this.Region = new Region(path); } protected override void OnPaint(PaintEventArgs pea) { }

  28. 이미지 처리 클래스 • 9-18-1 예제 • 복잡한 이미지 처리 메서드(GetPixel(), SetPixel() 이용)

  29. 스크래치 프로그램 • 9-18-4 예제 • TextureBrush 이용

  30. 아바타 이미지 • 9-18-6 예제

  31. 사운드 재생(1) • SystemSound 클래스 : 5가지 기본 시스템 소리 • SoundPlayer : wav파일 재생 • 9-18-9 예제

  32. 사운드 재생(2) • 9-18-9 소스 분석 SystemSounds.Asterisk.Play(); SystemSound obj = SystemSounds.Question; obj.Play(); ---------------------------------------------------------------------------------------------------------- private void btn_WavePlay_Click(object sender, EventArgs e) { SoundPlayer player = new SoundPlayer(); OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { player.SoundLocation = dlg.FileName; player.Load(); player.PlaySync(); // 동기식 player.Play(); // 비동기식 } }

More Related