一个应用程序,两个comps,两个不同的外观

时间:2016-06-02 12:47:47

标签: c#

我有一个使用ToolStrip的简单应用程序,ToolStripDropDownButton作为其subs,ToolStripMenuItem作为其子。

在ctor(或Load)中,我为toolstrip调用临时方法(如下所示)。

在一台计算机上,所有控件都着色:工具条,下拉按钮和项目。在另一台计算机上,只有工具条和下拉按钮被着色(项目没有着色)。

两台计算机都有Win 7 64,Net Framework 4.5。应用程序:C#中的Windows窗体。

有人可以解释它是如何可行的以及如何解决它?

void ColorSubItems(object obj, Color color) {
        if(obj.GetType() == typeof(ToolStrip)) {
            ((ToolStrip)obj).BackColor = color;
            foreach(ToolStripItem i in ((ToolStrip)obj).Items) {
                i.BackColor = color;
                ColorSubItems(i, color);
            }
        }
        else if(obj.GetType() == typeof(ToolStripDropDownButton)) {
            ((ToolStripDropDownButton)obj).BackColor = color;
            foreach(ToolStripDropDownItem i in
                 ((ToolStripDropDownButton)obj).DropDownItems
            ) {
                i.BackColor = color;
                ColorSubItems(i, color);
            }
        }
        else if(obj.GetType() == typeof(ToolStripMenuItem)) {
            ((ToolStripMenuItem)obj).BackColor = color;
            foreach(
                 ToolStripMenuItem i in (
                    (ToolStripMenuItem)obj).DropDownItems
            ) {
                i.BackColor = color;
                ColorSubItems(i, color);
            }
        }
        else {
            ((ToolStripItem)obj).BackColor = color;
        }
    }

1 个答案:

答案 0 :(得分:0)

检查其中一台计算机是否更改了配色方案或是否安装了自定义主题。 WinForms已经过时并且依赖于环境,例如使用系统颜色和字体来构建它们的外观,你永远不能保证它们在所有计算机上看起来都一样,考虑迁移到WPF。