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);
}
'프로그래밍 > C# (WinForms)' 카테고리의 다른 글
C# ] 명령프롬프트, 시스템 명령어 실행 (0) | 2023.07.11 |
---|---|
C#, WinForms ] 자식 폼에서 부모 폼으로 데이터 전달 방법, 이벤트 / 프로퍼티 (1) | 2023.05.14 |
WinForms ] Anchor, Dock properties (0) | 2023.05.14 |
C#, WinForms ] Event 와 delegate (0) | 2023.05.14 |
C#, WinForms ] CRC Checker (0) | 2023.05.14 |