Как привязать цвет спины комбинированного окна к цвету спины панели в C# - PullRequest
0 голосов
/ 06 февраля 2020

Итак ... Я пытаюсь запрограммировать небольшую игру на C# (mastermind), и у меня есть 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" - это строковый массив с различными цветами в нем. Ящики для предложений - это комбинированные окна, а Панель предложений - это панели.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Мое мнение, нет необходимости обновлять цвет спины всех панелей, когда нужно изменить только 1. Вы можете привязать свойство BackColor каждой панели к соответствующему свойству ComCobox 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]);
    }
}
0 голосов
/ 06 февраля 2020

Я сделал это сам, я не знаю, лучше ли это делать, но я сделал это так.

        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]);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...