2012-11-16 1 views
6

저는 ToolStrip (GripStyle : Hidden, Dock : Top, RenderMode : ManagerRenderMode)을 사용하여 꽤 표준 MainForm을 가지고있는 Windows Form 앱 (C#, .NET 4.0, VS 2010)으로 작업하고 있습니다. 도구 상자에는 몇 가지 기본 항목이 있습니다 (ToolStripLabel, ToolStripSeparator, ToolStripSplitButton). 다음과 같이 ToolStrip 둥근 모서리

은 렌더링 :

처음에는

ToolStrip rendered by default ManagerRenderMode

내가 단순히 ToolStrip의 아래에 '바닥'테두리를 추가하고 싶었다, 그러나 나는이 ToolStrip에가 ('둥근 모서리'로 렌더링되는 것으로 나타났습니다 이미지에서 오른쪽 상단 및 하단 이미지를 볼 수 있음) 및 수직 그래디언트 선.

어떻게하면이 구석을 반올림하지 않을 수 있습니까?

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer 
{ 
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
    { 
     base.OnRenderToolStripBorder(e); 

     var y = e.ToolStrip.Height-1; 
     e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y)); 
    } 

을 그리고 내 양식 초기화에 this.toolStrip_Actions.Renderer=new MainFormToolStripRenderer();을 통해 그것을 유선 :

나는 시도했다.

이렇게하면 아래쪽 테두리가 생겼지 만 둥근 모서리에는 아무 것도하지 않았습니다. 또한, 추가 하단 테두리, 라운딩은 더 두드러 :

ToolStrip rendered by custom ToolStripProfessionalRenderer

다음 I는 (적어도) 라운딩과 수직 숨기려고하는 상기와 동일한 이벤트 핸들러 중 직사각형 그리기 시도 단색 직사각형 테두리 뒤의 그라디언트. 사용 가능한 그리기 영역 (e.AffectedBounds)이 둥근 테두리 안에 있기 때문에 작동하지 않습니다.

또한 ToolStrip의 RenderMode를 System으로 설정하려고했는데 렌더러를 사용하지 않았습니다. 이 경우 툴팁 모서리가 꼭 맞게 (직사각형) 보이지만 툴바 내의 분할 버튼이 깨져있는 것처럼 보입니다 (아래쪽 화살표를 클릭해도 드롭 다운이 표시되지 않음). 아직 알려지지 않은 이유로 전체 모양 - 느낌이 약간 언저리입니다 (공구 스트립의 일부 버튼을 가리 키기 전까지는 매우 평평합니다).

결국 나는 ManageeRenderedMode 나 Professional 렌더로부터 상속받은 커스텀 렌더러를 고수 할 것입니다. 그러나 둥근 모서리를 제거해야합니다. 그 중에서도 this SO Q은 내가보고있는 것에 가깝지만 내 경우에는 답을주지 않았습니다. 사전에

감사

+1

Winforms는 완전히 자신 만의 컨트롤을 만들지 않고도 뭔가 다른 렌더링을하기위한 고통입니다. 너무 늦었지만 WPF/XAML을 망쳤습니까? – iMortalitySX

+0

감사합니다.하지만 WPF를 더 일찍 살펴 봤는데 지금은 "기본"winforms를 고수하려고합니다. 특정 세부 사항을 오버라이드해야한다면 표준 Toolstrip을 상속하지 않아도됩니다. 그렇습니다. 모든 것을 자체적으로 렌더링하지 않아도 좋을 것입니다 (특히 우리가 내부에 필요한 splitbutton 등을 사용하는 등).) – FOR

답변

9

은 렌더러 클래스에서 이것을 시도 : 언급 am05mhz으로

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer { 

    public MainFormToolStripRenderer() { 
    this.RoundedEdges = false; 
    } 
} 
+0

굉장해! 고마워요. (실제로 사용자 지정 렌더러에서 .RoundedEdges 속성을 false로 설정했으나 트릭이었습니다)! 모퉁이가 둥글어지지 않았기 때문에 분할 버튼이 작동을 멈추었 기 때문에 여전히 문제가 발생하지 않지만 기본 문제를 해결하고 나를 올바른 길로 인도하기 때문에 답을 수락합니다. – FOR

+2

실제로 System, Professional 및 ManagerRenderMode 옵션이있는 ToolStrip 속성에는 RenderMode 옵션이 있습니다. 첫 번째 옵션은 OS가 반올림되지 않은 ToolStrip을 렌더링하도록하고 마지막 두 개는 반올림됩니다 – am05mhz

2

, 단지 RenderMode> 시스템과 둥근 모서리가 사라 선택

0

건물에 accepted answer에 의해 LarsTech의 경우, 새로운 Renderer 클래스를 구현할 필요는 없습니다.다음과 같이

당신은 하나의 라이너로이 작업을 수행 할 수 있습니다

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false }; 

또는 ManagerRenderMode로 설정 RenderMode와 ToolStrip에 대한 기본 렌더러 이후

이미 ToolStripProfessionalRenderer, 당신은 같은 캐스팅과 RoundedEdges에 액세스 할 수 있습니다 속성은 다음과 같이 직접 입력합니다.

((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;