Включить / отключить указанный c флажок в указанной c панели, когда флажок установлен - PullRequest
0 голосов
/ 10 июля 2020

Я кодирую приложение C# Forms. У меня есть две разные панели на моей форме, и я создаю динамические c флажки на обеих своих панелях. Что я хочу сделать, так это: если я поставлю флажок c на панели1, я хочу отключить / включить флажок c на панели2.

foreach (Control checkbox_panel1 in checkBoxPanel1.Controls)
{
    foreach (Control checkbox_panel2 in checkBoxPanel2.Controls)
    {
        if (checkbox_panel1 is CheckBox)
        {
            CheckBox cb_p1 = (CheckBox)checkbox_panel1;
            CheckBox cb_p2 = (CheckBox)checkbox_panel2;

            if (cb_p1.Checked)
            {
                cb_p2.Enabled = false;
            }
            else
            {
                cb_p2.Enabled = true;
            }
        }
    }
}

Мой код не выполняет то, что я хочу. Это отключение и включение флажков одним щелчком мыши. И это отключение всех флажков в Panel2. Я просто хочу, чтобы один конкретный c флажок был отключен.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вам необходимо установить свойство .Name ваших CheckBoxes при их создании:

CheckBox cb1 = new CheckBox();
cb1.Name = "Car"; // make sure you set the NAME property!
cb1.Text = "Car";
panel1.Controls.Add(cb1);

CheckBox cb2 = new CheckBox();
cb2.Name = "Bcylist"; // make sure you set the NAME property!
cb2.Text = "Bicyclist";
panel2.Controls.Add(cb2);

Очевидно, ваш код будет другим, поскольку вы читаете значения из База данных. Ключевым моментом выше является то, что мы устанавливаем свойство .Name для CheckBoxes.

Затем, после того, как вы их создали, вы хотите связать «Car» с «Bcylist»:

LinkCheckBoxes("Car", "Bcylist");

Использование этого вспомогательного метода:

private void LinkCheckBoxes(string cbName1, string cbName2)
{
    var ctl1 = this.Controls.Find(cbName1, true).FirstOrDefault();
    var ctl2 = this.Controls.Find(cbName2, true).FirstOrDefault();
    if (ctl1 != null && ctl1 is CheckBox && ctl2 != null && ctl2 is CheckBox)
    {
        CheckBox cb1 = (CheckBox)ctl1;
        CheckBox cb2 = (CheckBox)ctl2;
        cb1.CheckedChanged += (s, e) => {
            cb2.Enabled = !cb1.Checked;
        };
    }
}

Теперь, когда вы отметите «Автомобиль», «Bcylist» будет отключен. Когда вы снимете флажок «Автомобиль», «Bcylist» снова включится.

Если информация о «связывании» была в самой базе данных, вы могли бы автоматизировать этот процесс вместо жесткого кодирования «Car» и «Bcylist» "на звонок LinkCheckBoxes().

0 голосов
/ 10 июля 2020

if(cb_p1.name == "your checkbox name")
    {
        if (cb_p1.Checked)
            {
                cb_p2.Enabled = false;
            }
            else
            {
                cb_p2.Enabled = true;
            }
    }
...