【问题标题】:How to Bind a Combo Box back color to a Panel back color in C#如何在 C# 中将组合框背景颜色绑定到面板背景颜色
【发布时间】:2020-05-22 11:10:53
【问题描述】:

所以...我正在尝试用 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# .net forms visual-studio winforms


    【解决方案1】:

    我的意见,当只需要更改 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]);
        }
    }
    

    【讨论】:

    • 啊,谢谢你的帖子,但我想我有一个很好的方法:D.
    • 这是一个好方法,但有几点需要注意: 1. 您可以拥有一个List&lt;Color&gt; 并将其用作ComboBox.DataSourceColor 名称将用作DisplayMember自动),然后,在SelectedIndexChanged 处理程序中,您可以设置comboBox.BackColor = (Color)comboBox.SelectedItem;。 2.总是添加一个检查索引&lt; 0,如if (comboBox.SelectedIndex &lt; 0) return;
    【解决方案2】:

    我自己做的,我不知道这是不是最好的事情,但我是这样做的。

            private void Suggestion_Box_SelectedIndexChanged(object sender, EventArgs e)
        {
            Dictionary<ComboBox, Panel> CoLi = new Dictionary<ComboBox, Panel>
            {
                { Suggestion_Box1, Suggestion_Panel1 },
                { Suggestion_Box2, Suggestion_Panel2 },
                { Suggestion_Box3, Suggestion_Panel3 },
                { Suggestion_Box4, Suggestion_Panel4 }
            };
            foreach (var i in CoLi)
            {
                if (i.Key.SelectedIndex != -1)
                {
                    i.Key.BackColor = Color.FromName(Used_Colors[i.Key.SelectedIndex]);
                    i.Value.BackColor = Color.FromName(Used_Colors[i.Key.SelectedIndex]);
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2016-07-09
      • 2011-05-07
      • 2016-11-26
      • 2019-08-30
      • 1970-01-01
      相关资源
      最近更新 更多