본문 바로가기
프로그래밍/C# (WinForms)

C#, WinForms ] tabControl의 탭 부분 색상 변경

by eteo 2023. 11. 7.

 

 

 

 

tabControl의 DrawMode 속성을 OwnerDrawFixed로 설정하고 DrawItem 이벤트 핸들러를 연결

 

 

private void Form1_Load(object sender, EventArgs e)
{
    //...
    tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
    tabControl1.DrawItem += new DrawItemEventHandler(tabControl1_DrawItem);
    //...
}

 

 

이 부분은 GUI를 통해서도 가능하다.

 

 

 

 

 

 

DrawItem 이벤트 핸들러는 각 탭 버튼을 그릴 때 호출된다.

e.Index는 현재 탭 버튼의 인덱스로 현재 그려지고 있는 탭 버튼이 어떤 탭 페이지에 해당하는지 확인할 수 있다.

e.Bounds는 현재 탭버튼의 경계영역이다.

 

 

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
	// 인덱스에 따라 탭 부분 배경 그림
   switch (e.Index)
   {
       case 0:
           e.Graphics.FillRectangle(new SolidBrush(Color.SteelBlue), e.Bounds);
           break;
       case 1:
           e.Graphics.FillRectangle(new SolidBrush(Color.DarkCyan), e.Bounds);
           break;
       case 2:
           e.Graphics.FillRectangle(new SolidBrush(Color.Goldenrod), e.Bounds);
           break;
       case 3:
           e.Graphics.FillRectangle(new SolidBrush(Color.DarkMagenta), e.Bounds);
           break;
       case 4:
           e.Graphics.FillRectangle(new SolidBrush(Color.YellowGreen), e.Bounds);
           break;
       default:
           break;
   }

   // 탭 부분 텍스트 그림
   Rectangle paddedBounds = e.Bounds;
   paddedBounds.Inflate(-6, -2);	// 경계 축소해서 텍스트가 가운데 위치하도록 함
   e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text, e.Font, SystemBrushes.HighlightText, paddedBounds);
}