[英]Dynamically adding ToolStripMenuItems to a MenuStrip (C#/ Winforms)
[英]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.