2008-09-15 6 views
0

탭 페이지에 .NET의 표준 탭 컨트롤을 사용하는 경우 모양과 느낌을 약간 변경하려고하면 탭 컨트롤의 경우가 아니라 탭 페이지의 뒤로 색상을 변경할 수 있습니다. 속성을 사용할 수 있지만 설정할 수는 있지만 효과가 없습니다. 탭 컨트롤이 아닌 페이지의 뒤쪽 색상을 변경하면 ...보기 흉하게 들립니다.BackColor가 .NET의 TabControls에서 작동하지 않는 이유는 무엇입니까?

Microsoft는 설정하기를 원하지 않습니다. MSDN : '이 속성은 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다. 이 멤버는이 컨트롤에 의미가 없습니다. '.NET 인프라를 지원하는 색상 용 컨트롤 속성? ... 믿기 어렵다.

나는 마이크로 소프트가 수년에 걸쳐 바꿀 것을 바랬지 만, 그렇지 않았다. 이 문제를 해결하기 위해 페인트 메서드를 재정의하는 자체 TabControl 클래스를 만들었습니다. 그러나 이것이 정말로 최고의 솔루션입니까?

이 컨트롤에 BackColor를 지원하지 않는 이유는 무엇입니까? 이 문제를 해결할 수있는 솔루션은 무엇입니까? 페인트 방법을 재정의하는 것보다 나은 해결책이 있습니까?

+0

MS가 뭔가를 한 이유를 묻는 것이 조금 답답합니다. 당신은 당신의 질문을 다시 말해야합니다. – GEOCHET

답변

1

배경 색상은 OS의 디스플레이 등록 정보에 의해 제어 될 것으로 보인다. 모양 탭, Windows 및 버튼 속성 (Windows XP) 아래에 특히. Windows 클래식 스타일로 설정하면 탭의 색상이 변경되지 않습니다. Windows XP 스타일로 설정하면 선택시 회색에서 흰색으로 바뀝니다. 배경색을 제어 할 수 없다는 것이 특징입니다!

2

Rajesh 블로그의 솔루션은 정말 유용하지만 컨트롤의 탭 부분 만 색칠합니다. 제 경우에는 다른 색깔의 배경에 tabcontrol을 가지고있었습니다. 탭 자체는 회색 이었지만 문제가 아니었지만 탭 오른쪽의 영역은 회색 스트립으로 표시되었습니다.

이 색상을 배경색으로 변경하려면 다음 코드를 DrawItem 메소드에 추가해야합니다 (Rajesh의 솔루션 참조). 나는 VB.Net을 사용하고 있습니다 :

... 

Dim r As Rectangle = tabControl1.GetTabRect(tabControl1.TabPages.Count-1) 
Dim rf As RectangleF = New RectangleF(r.X + r.Width, r.Y - 5, tabControl1.Width - (r.X + r.Width), r.Height + 5) 
Dim b As Brush = New SolidBrush(Color.White) 
e.Graphics.FillRectangle(b, rf) 

... 

는 기본적으로 사용자가 탭 컨트롤의 오른쪽에 마지막 탭의 오른쪽 만든 사각형을 가져온 다음 원하는 색상으로 작성해야합니다.

0

감사합니다. LauraM. 너는 나를 올바른 길로 인도하는 것을 도왔다. 나는 Oskar가 제공 한 링크를 이미 발견했지만, 결국에는 그 스트립을 위해 아무 것도하지 않았다.

결국 나는 피를 흘릴 양식의 배경 이미지가 필요하거나 부모가 배경 이미지가없는 무언가, 배경색이 필요했기 때문에 결국 조금씩 바꿔야했습니다. 그들이 존재했는지 보여주는 아이콘도 필요했습니다. 내 코드 TabControl BackColor fix post에 전체 글을 남겼습니다.

+1

블로그 게시물을 보관 해 주셔서 감사합니다. 오, 잠깐, 안 그랬어. –