2014-10-28 9 views
1

내 응용 프로그램에서 ToolStripMenuItems를 사용자 지정해야합니다. 하위 메뉴를 여는 각 ToolStripMenuItem에는 텍스트 근처에 검은 색 화살표가 있습니다. 일부 색 (MenuItemSelected, MenuItemBorder, MenuItemSelectedGradientBegin, ...)과이 화살표의 색을 변경하려고합니다. I는 화살표 C에서 ToolStripMenuItems 사용자 지정

public class CustomToolStripRenderer : ToolStripProfessionalRenderer 
{ 
    private readonly ToolStripProfessionalRenderer _toolStripRenderer; 

    public CustomToolStripRenderer(ToolStripProfessionalRenderer toolStripRenderer) 
    { 
    _toolStripRenderer = toolStripRenderer; 
    } 

    protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) 
    { 
    var tsMenuItem = e.Item as ToolStripMenuItem; 
    if (tsMenuItem != null) 
    e.ArrowColor = Color.White; 
    base.OnRenderArrow(e); 
    } 

    public void Render() 
    { 
    _toolStripRenderer.RoundedEdges = false; 
    ToolStripManager.Renderer = this; 
    //ToolStripManager.Renderer = _toolStripRenderer; 
    } 
} 

I가 렌더링() 메소드

CustomToolStripRenderer customRenderer = new CustomToolStripRenderer(new ToolStripProfessionalRenderer(new MyColorTable())); 

    customRenderer.Render(); 
에게 전화

의 색상을 변경하는 제 문제

public class MyColorTable : ProfessionalColorTable 
{ 
    public override Color MenuItemSelected 
    { 
    get { return Color.Silver; } 
    } 

    public override Color MenuItemBorder 
    { 
    get { return Color.WhiteSmoke; } 
    } 

    public override Color MenuItemSelectedGradientBegin 
    { 
    get { return Color.FromArgb(60, 60, 60); } 
    } 
} 

다른 클래스를 해결하기 위해, 클래스 MyColor을 만든

나는 화살이 희게되다. 그러나 나는이 선 때문에 첫번째 변화를 잃는다.

ToolStripManager.Renderer = this; 

나는 당신은 확실히 그 _toolStripRenderer 변수를 제거하는 데 필요한 코드의 의미를하기 때문에 정적 클래스 ToolStripManager

답변

3

하드에이 문제를 해결하기 쉬운 솔루션을 찾을 수 없습니다입니다. 내가 작성합니다

public class CustomToolStripRenderer : ToolStripProfessionalRenderer { 
     public CustomToolStripRenderer() : base(new MyColorTable()) { 
      this.RoundEdges = true; 
     } 
     protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { 
      // etc.. 
     } 
    } 

을 다음 양식 생성자에서 :

public Form1() { 
     InitializeComponent(); 
     ToolStripManager.Renderer = new CustomToolStripRenderer(); 
    } 

작품 벌금을.