2013-12-12 3 views
0

만들고있는 맞춤 패널에 많은 어려움이 있습니다.하위 컨트롤에 사용자가 설정 한 BackColor가 있는지 확인

모서리가 둥글므로 BackColor은 모서리에서만 볼 수 있으며 패널의 주 색상은 별도 색상 인 m_mainPanelColour입니다. 불행히도, 내가 컨트롤을 추가 할 때, 이 아닌 Panel.BackColor에 BackColor를 설정합니다.

새로 추가 된 컨트롤의 BackColor를 m_mainPanelColour으로 설정하기 위해 이벤트를 재정의했습니다.

내 문제는이 시나리오에 대한 컨트롤을 쿼리하는 방법을 모른다는 것입니다. 그러나 표준 Windows Panel이이를 수행하기 때문에 가능해야합니다.

아무도 제안 사항이 있습니까? 미리 감사드립니다.

+0

m_mainPanelColour를 Panel BackColor로 만들 수 없습니까? 나는 자식 컨트롤이 부모의 배경을 상속하기 위해 단지 분위기를 사용한다고 생각한다. –

답변

0

당신은의 InitializeComponent()하기 전에, 을 사용자 지정 컨트롤에서 하위 새로운()를 선언하고 다음 코드 줄을 추가 할 수 있습니다 :

SetStyle(ControlStyles.ResizeRedraw Or _ 
     ControlStyles.AllPaintingInWmPaint Or _ 
     ControlStyles.OptimizedDoubleBuffer Or _ 
     ControlStyles.SupportsTransparentBackColor Or _ 
     ControlStyles.UserPaint, True) 

UpdateStyles() 

이 투명 배경 색상 지원을 가능하게 할 것이다. 이렇게하면 Color.Transparent 컨트롤의 기본 색상을 만들 수 있으므로 컨트롤의 사용자가 다른 색상을 선택하는 경우에만 색상이 그려집니다. 물론 당신은 전체 컨트롤을 그림으로 그려야합니다.

일반적으로 e.Graphics.Clear (Color.Transparent)는 투명 검정색 (&H0I)으로 컨트롤을 빠르게 채 웁니다. 그러나 예를 들어 Me.CreateGraphics를 호출하여 페인트 이벤트 외부에서 Graphics 객체에 액세스하면 백그라운드를 투명하게 쉽게 지울 수 없습니다.

+0

고마워, 네, 그게 내가 필요한 효과를 줄 수있는 방법을 알 수 있습니다. 기본적으로 Color.Transparent를 페인팅 할 때 성능 문제는 없습니까? 또한 사용자가 BackColor를 설정할 때 Windows Panel이 어떻게 알 수 있는지 궁금합니다. – user3020788

+0

BackColor 속성을 재정의하고 자신의 코드를 추가하여 사용자가 BackColor를 변경하면 컨트롤 내부에 플래그를 설정할 수 있습니다. BackColor를 투명하게 그리는 데 눈에 띄는 성능 문제는 없을 것입니다. 믿을 수 없습니다. –