首页 > 解决方案 > 如何在 C# 中将组合框背景颜色绑定到面板背景颜色

问题描述

所以...我正在尝试用 C#(策划者)编写一个小游戏,我有 4 个不同的面板和 4 个不同的组合框,例如,我希望 Pane1 具有与 ComboBox1 中选择的颜色相同的背景颜色。现在我用列表做了,但我想知道是否有更好/更短的方法来做到这一点。

        private void Suggestion_Box_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<ComboBox> boxes = new List<ComboBox>()
        {
            Suggestion_Box1,
            Suggestion_Box2,
            Suggestion_Box3,
            Suggestion_Box4
        };
        var i = 0;
        foreach (ComboBox cb in boxes)
        {
            if (cb.SelectedIndex != -1)
            {
                cb.BackColor = Color.FromName(All_Colors[cb.SelectedIndex]);
                Suggestion_Panel1.BackColor = Suggestion_Box1.BackColor;
                Suggestion_Panel2.BackColor = Suggestion_Box2.BackColor;
                Suggestion_Panel3.BackColor = Suggestion_Box3.BackColor;
                Suggestion_Panel4.BackColor = Suggestion_Box4.BackColor;  
            }
        }
    }

“All_Colors”数组是一个字符串数组,其中包含不同的颜色。建议框是组合框,建议面板是面板。

标签: c#.netformsvisual-studiowinforms

解决方案


我的观点是,当只需要更改 1 时,无需更新所有面板的背景颜色。您可以将每个面板的 BackColor 属性绑定到相应的 ComboBox 的 BackColor 属性。

我的代码:

public partial class Form1 : Form
{
    List<string> colors = new List<string> { "red", "blue", "green", "yellow" };
    public Form1()
    {
        InitializeComponent();

        // binding here
        this.panel1.DataBindings.Add("BackColor", this.comboBox1, "BackColor");
        this.panel2.DataBindings.Add("BackColor", this.comboBox2, "BackColor");
        this.panel3.DataBindings.Add("BackColor", this.comboBox3, "BackColor");
        this.panel4.DataBindings.Add("BackColor", this.comboBox4, "BackColor");
    }

    private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        var comboBox = sender as ComboBox;
        if(comboBox.SelectedIndex < 0)
            return;
        comboBox.BackColor = Color.FromName(colors[comboBox.SelectedIndex]);
    }
}

推荐阅读