본문 바로가기
C++ 200제/코딩 IT 정보

C# DataGridView 사용법, 바둑판 예제 (winform 응용)

by vicddory 2018. 2. 4.

C# DataGridView 사용법, 바둑판 예제 (winform 응용)


C# DataGridView 그리드 패턴 바둑판 윈도우폼[C# 선그리기 윈도우폼 바둑판]


프로젝트 다운로드  : C# DataGridView_Pattern_master.zip [링크]


속성 변경

C#으로 일명, 바둑판(Grid Pattern)을 만드는 예제입니다. 별도의 GDI는 사용하지 않고 DataGridView의 속성을 변경해 사용합니다. 아래처럼 수정해 보세요.


(수정 1. 동작 부분)

C# DataGridView 바둑판[C# 선그리기 윈도우폼 바둑판]


(수정 2. 레이아웃)

C# DataGridView form 예제[C# 선그리기 윈도우폼 바둑판]


(수정 3. 모양)

C# DataGridView 프로그래밍[C# 선그리기 윈도우폼 바둑판]

프로그램 실행

프로그램을 구동시켜 "SET" 버튼을 누르면 패턴이 편집되어 생성됩니다. 아래처럼 50 by 50 크기의 바둑판을 만들 수가 있죠. 바둑판에서 마우스 클릭은 회색, 드래그는 검은색으로 표시됩니다.


C# DataGridView 강좌[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(100100100);
}
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# DataGridView 바둑판 강좌 프로그래밍[C# 선그리기 윈도우폼 바둑판]


C# DataGridView 사용법, 바둑판 예제 (winform 응용)

댓글