我已经带着这个问题来了,但答案并不是我所期望的......
如上图所示,我有两个主题(浅色和深色)。 “浅色”主题运行良好,但是当我单击“深色”主题时,下拉菜单中的菜单项仍然相同,具有相同的前景色(黑色)。我想知道是否有某种方法,当我单击“深色”按钮时,它会将每个项目的前景色更改为白色,而无需逐一更改的麻烦。
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);
请帮忙。
看,为了改变项目的前景色,你需要使用循环,特别是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;
}
}
}