320 likes | 559 Views
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 예제
E N D
9장 마무리 15~18절 Made by Yoon
Contents • Section 15. 드래그 앤 드롭, 클립보드 • Section 16. 트리뷰와 리스트뷰 그리고 스 플리터 • Section 17. 사용자 지정 컨트롤 작성하기 • Section 18. GDI+ 고급 활용
드래그 앤 드롭(1) • 개념 • 기본셋팅 – 616p • 이벤트 4가지 – 616p • 이벤트 사용법 – 619p
드래그 앤 드롭(2) • 9-15-1 예제 • 문제점 : 윈도우의 일반적인 text 파일의 형태에서 한글이 들어간 부분은 인식 못함
드래그 앤 드롭(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 이벤트 }
드래그 앤 드롭(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(); } }
클립보드(1) • 개념 • 다양한 메서드 – 620p • 모두 static 형태로 바로 사용 가능
클립보드(2) • 9-15-2 예제
클립보드(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. }
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); } }
트리뷰(1) • 개념 – 626p • TreeView : 전체 틀 • TreeNode : 각각의 노드 • TreeNodeCollection : 노드 관리 • 메서드 – 626~627p
트리뷰(2) • 9-16-1 예제
트리뷰(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("뉴욕주");
트리뷰(4) • 9-16-2 예제
트리뷰(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; } }
리스트뷰(1) • 개념 • 이벤트 처리 – 634p • 9-16-4 예제
리스트뷰(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);
스플리터(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);
사용자 지정 컨트롤 만들기(1) • 9-17-1 예제
사용자 지정 컨트롤 만들기(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); } } } }
사용자 지정 컨트롤 만들기(3) • 9-17-4 예제 • 사용자 정의 버튼에서는 선택 윤곽이 나타나지 않음!
사용자 지정 컨트롤 만들기(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) { }
이미지 처리 클래스 • 9-18-1 예제 • 복잡한 이미지 처리 메서드(GetPixel(), SetPixel() 이용)
스크래치 프로그램 • 9-18-4 예제 • TextureBrush 이용
아바타 이미지 • 9-18-6 예제
사운드 재생(1) • SystemSound 클래스 : 5가지 기본 시스템 소리 • SoundPlayer : wav파일 재생 • 9-18-9 예제
사운드 재생(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(); // 비동기식 } }