簡體   English   中英

在c#中自定義ToolStripMenuItems

[英]Customize ToolStripMenuItems in c#

我需要在我的應用程序中自定義ToolStripMenuItems。 打開子菜單的每個ToolStripMenuItem在文本附近都有一個黑色箭頭。 我想改變一些顏色(MenuItemSelected,MenuItemBorder,MenuItemSelectedGradientBegin,...)和這個箭頭的顏色。 我創建了一個類MyColor來解決第一個問題

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); }
  } 
}

另一類改變箭頭的顏色

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;
  }
}

當我調用Render()方法時

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

    customRenderer.Render();

我知道箭頭變成了白色,但由於這條線,我失去了第一個變化

 ToolStripManager.Renderer = this;

由於靜態類ToolStripManager,我無法找到解決此問題的簡單解決方案

很難理解代碼,你肯定需要擺脫_toolStripRenderer變量。 我會寫:

    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();
    }

工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM