winforms 想添加不同的主题到我的应用程序

de90aj5v  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(54)

基本上,我做了一个基本的笔记应用程序,并希望添加不同的颜色选项,例如,一个光明的版本和黑暗的版本,更容易由用户查看.我计划给给予它给几个朋友,但没有人可以同意的颜色,所以我想我只是让它可定制的用户通过小按钮.
我不是很有经验,但是,我想知道我会如何去做这件事?

svujldwt

svujldwt1#

你可以循环浏览所有的控件并改变它们的颜色。BackColor:

private void ChangeTheme_btn_Click(object sender, EventArgs e)
{
    ChangeTheme(this.Controls, Color.Aqua);
}

private void ChangeTheme(Control.ControlCollection controls, Color color)
{
    foreach (Control control in controls)
    {
        if (control.HasChildren)
        {
            // Recursively loop through the child controls
            ChangeTheme(control.Controls, color);
        }
        else
        {
            if (control is TextBox textBox)
            {
                textBox.BackColor = color;
            }
            else if (control is Button button)
            {
                button.BackColor = color;
            }
        }
    }
}

字符串
您可以为每种类型的控件设置单独的颜色,还可以更改其他属性。

如果您有多个表单,您可以执行以下操作:

private readonly List<Control> listOfAllFormControls = new List<Control>();
private void MyForm1_form_Load(object sender, EventArgs e)
{
    // Add all the controls to the list
    foreach (Control item in MyForm1.instance.Controls)
    {
        listOfAllFormControls.Add(item);
    }
    foreach (Control item in MyForm2.instance.Controls)
    {
        listOfAllFormControls.Add(item);
    }
}

private void ChangeTheme_btn_Click(object sender, EventArgs e)
{
    SetColorThemeToLight(listOfAllFormControls);
}


private void SetColorThemeToLight(List<Control> list)
{
    foreach (Control control in list)
    {
        if (control.HasChildren)
        {
            // Recursively loop through the child controls
            List<Control> controlList = new List<Control>();
            foreach (Control item in control.Controls)
            {
                controlList.Add(item);
            }
            SetColorThemeToLight(controlList);
        }
        else
        {
            switch (control)
            {
                case TextBox textBox:
                    textBox.BackColor = Color.Blue;
                    break;

                case Button button:
                    button.BackColor = Color.Blue;
                    break;
            }
        }
    }
}


我也用了switch case代替

相关问题