单击按钮时立即更改所有菜单项前景色

问题描述 投票:0回答:1

My program themes

我已经带着这个问题来了,但答案并不是我所期望的......


如上图所示,我有两个主题(浅色和深色)。 “浅色”主题运行良好,但是当我单击“深色”主题时,下拉菜单中的菜单项仍然相同,具有相同的前景色(黑色)。我想知道是否有某种方法,当我单击“深色”按钮时,它会将每个项目的前景色更改为白色,而无需逐一更改的麻烦。

private void darkToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.BackColor = Color.FromArgb(30,30,30);
    lblTvalue.Text = "0";
    Application.DoEvents();
    menuStrip.ForeColor = Color.FromArgb(225,225,225); //<- I want a code like this
    menuStrip.Renderer = new MyRendererBlack();
}

有些人告诉我要一一做:

private void darkToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.BackColor = Color.FromArgb(30,30,30);
    menuStrip.ForeColor = Color.FromArgb(225,225,225);
    themeToolStripMenuItem.ForeColor = Color.FromArgb(225,225,225);
    lightToolStripMenuItem.ForeColor = Color.FromArgb(225,225,225);
    darkToolStripMenuItem.ForeColor = Color.FromArgb(225,225,225);
    testToolStripMenuItem.ForeColor = Color.FromArgb(225,225,225);
}

但是,如果我想添加新项目怎么办?我必须一直这样做吗? 是否有一种简单的方法可以获取 ToolStripMenuItem 的属性并使所有内容变为白色? 比如:

ToolStripMenuItem.ForeColor = Color.FromArgb(225,225,225);

请帮忙。

c# winforms drop-down-menu colors
1个回答
0
投票

看,为了改变项目的前景色,你需要使用循环,特别是foreach循环,我为你编写了以下代码,希望对你有帮助。

public System.Drawing.Color MenuForeColor
{
get { return this.menuForeColor; }
set
{
this.menuForeColor = value;
foreach (ToolStripMenuItem item in this.Items.OfType<ToolStripMenuItem>())
{
item.ForeColor = value;
foreach (ToolStripMenuItem drop1 in item.DropDownItems.OfType<ToolStripMenuItem>())
{
drop1.ForeColor = value;
foreach (ToolStripMenuItem drop2 in drop1.DropDownItems.OfType<ToolStripMenuItem>())
{
drop2.ForeColor = value;
}
}
}
© www.soinside.com 2019 - 2024. All rights reserved.