티스토리 뷰
목차
C# DataGridView 사용법, 바둑판 예제 (winform 응용)
[C# 선그리기 윈도우폼 바둑판]
프로젝트 다운로드 : C# DataGridView_Pattern_master.zip [링크]
속성 변경
C#으로 일명, 바둑판(Grid Pattern)을 만드는 예제입니다. 별도의 GDI는 사용하지 않고 DataGridView의 속성을 변경해 사용합니다. 아래처럼 수정해 보세요.
(수정 1. 동작 부분)
[C# 선그리기 윈도우폼 바둑판]
(수정 2. 레이아웃)
[C# 선그리기 윈도우폼 바둑판]
(수정 3. 모양)
[C# 선그리기 윈도우폼 바둑판]
프로그램 실행
프로그램을 구동시켜 "SET" 버튼을 누르면 패턴이 편집되어 생성됩니다. 아래처럼 50 by 50 크기의 바둑판을 만들 수가 있죠. 바둑판에서 마우스 클릭은 회색, 드래그는 검은색으로 표시됩니다.
[C# 선그리기 윈도우폼 바둑판]
(C# DataGridView 예제 실행 화면)
GridView에선 다루는 행과 열이 많아 속도 저하 문제가 발생할 수 있습니다. 아래처럼 DoubleBuffred 속성을 주어 속도를 향상할 수 있습니다. (GridView의 Drag 색상을 검은색으로 지정)
1 2 3 4 5 6 7 8 9 | typeof(Control).InvokeMember("DoubleBuffered" , System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic , null, dgvForm, new object[] { true }); this.Controls.Add(dgvForm); dgvForm.DefaultCellStyle.SelectionBackColor = Color.FromArgb(gridViewBackColor, gridViewBackColor, gridViewBackColor); | cs |
GridView에 3개의 이벤트를 줍니다. MouseDown에선 선택된 셀의 색을 무조건 변경합니다.
1 2 3 4 5 | private void dgvForm_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) { dgvForm.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.FromArgb(100, 100, 100); } | cs |
MouseUp에선 선택된 셀이 존재하면 해당 셀들의 색을 변경합니다. C# DataGridView에서 선택된 셀의 수가 2개 이상이면, 검은색으로 변하나, 2개 미만이면 Down 이벤트에서 변경된 색이 유지됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private void dgvForm_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) { if (dgvForm.SelectedCells.Count > 1) // 선택된 셀이 존재한다면, { // 선택된 셀들의 색상을 변경 foreach (DataGridViewCell cell in dgvForm.SelectedCells) { cell.Style.BackColor = Color.FromArgb(gridViewBackColor, gridViewBackColor, gridViewBackColor); } } // 드래그 영역 해제, 해제하지 않으면, 선택된 영역이 계속해서 색상 변경의 영향을 받게됨 dgvForm.ClearSelection(); } | cs |
제어가 끝나면, CellEndEdit 이벤트가 호출되어 드래그 영역에 대한 색상이 변경됩니다.
1 2 3 4 5 | private void dgvForm_CellEndEdit(object sender, DataGridViewCellEventArgs e) { dgvForm.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.FromArgb(gridViewBackColor, gridViewBackColor, gridViewBackColor); } | cs |
소스 중간중간에 보이는 "gridViewBackColor" 변수의 값을 변경하면, 드래그 영역에 대한 색상을 유동적으로 제어할 수도 있습니다.
[C# 선그리기 윈도우폼 바둑판]
C# DataGridView 사용법, 바둑판 예제 (winform 응용)