c# foreach не корректно работает с массивом CheckBox?

211
18 января 2020, 00:00

Выходит исключение в виде названия данного портала, при отладке он бесконечно бегает внутри foreach с 1-м элементом, не переходя к остальным. С чем это связанно?

 public void GenerateView(ref CheckBox cb)
    {
        CheckBox[] CB = new CheckBox[] { CBZPI,CBZFI,CBBrakM,CBBrakW };
        foreach (CheckBox cbt in CB)
        {
            cbt.Checked = false;
            if (cbt == cb)
                cbt.Checked=true;
        }
Answer 1

Если я правильно понял, вы хотите реализовать нечто такое...

Используйте для сравнения значение свойства Tag. Для наглядности я создаю чекбоксы в коде, но вы вольны их создать в дизайнере, только не забудьте назначить всем чекбоксам нужные значения свойства Tag.

public partial class Form1 : Form
{
    private readonly string _tagDog = "Dog";
    private readonly string _tagCat = "Cat";
    public Form1()
    {
        InitializeComponent();
        this.StartPosition = FormStartPosition.CenterScreen;
        this.Text = "Пример";
        //добавляем в коде чексбоксы
        AddTypeAnimalsCheckboxes();
        AddAnimalsCheckboxes();
    }
    private void AddTypeAnimalsCheckboxes()
    {
        int startY = 33;
        int delta = 20;
        var checkBoxDogs = new CheckBox
        {
            Name = "checkBoxDogs",
            Tag = _tagDog, //!
            Text = "Собаки",
            Height = 17,
            Width = 70,
            Location = new Point(x: 34, y: startY)
        };
        var checkBoxCats = new CheckBox
        {
            Name = "checkBoxCats",
            Tag = _tagCat, //!
            Text = "Кошки",
            Height = 17,
            Width = 70,
            Location = new Point(x: 34, y: startY + delta)
        };
        checkBoxDogs.CheckedChanged += CheckBoxAnimal_CheckedChanged;
        checkBoxCats.CheckedChanged += CheckBoxAnimal_CheckedChanged;
        groupBoxTypeAnimal.Controls.Add(checkBoxDogs);
        groupBoxTypeAnimal.Controls.Add(checkBoxCats);
    }
    private void AddAnimalsCheckboxes()
    {
        int startY = 33;
        int delta = 20;
        var checkBoxDog1 = new CheckBox
        {
            Name = "checkBoxDog1",
            Tag = _tagDog, //!
            Text = "Шарик",
            Height = 17,
            Width = 70,
            Location = new Point(x: 36, y: startY)
        };
        var checkBoxCat1 = new CheckBox
        {
            Name = "checkBoxCat1",
            Tag = _tagCat, //!
            Text = "Мурзик",
            Height = 17,
            Width = 70,
            Location = new Point(x: 36, y: startY + delta)
        };
        var checkBoxDog2 = new CheckBox
        {
            Name = "checkBoxDog2",
            Tag = _tagDog,
            Text = "Мухтар",
            Height = 17,
            Width = 70,
            Location = new Point(x: 36, y: startY + delta * 2)
        };
        var checkBoxCat2 = new CheckBox
        {
            Name = "checkBoxCat2",
            Tag = _tagCat,
            Text = "Барсик",
            Height = 17,
            Width = 70,
            Location = new Point(x: 36, y: startY + delta * 3)
        };
        groupBoxAnimals.Controls.Add(checkBoxDog1);
        groupBoxAnimals.Controls.Add(checkBoxCat1);
        groupBoxAnimals.Controls.Add(checkBoxDog2);
        groupBoxAnimals.Controls.Add(checkBoxCat2);
    }
    private void CheckBoxAnimal_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        foreach (CheckBox cb in groupBoxAnimals.Controls.OfType<CheckBox>())
        {
            //ищем по совпадению со значением Tag
            if (cb.Tag == checkBox.Tag)
            {
                cb.Checked = checkBox.Checked;
            }
        }
    }
}
READ ALSO
Одновременное нажатие на две кнопки

Одновременное нажатие на две кнопки

Как можно реализовать следующее: есть две кнопки UIButton, при одновременном нажатии на обе должно выполняться некое действие

197
Повышение сложности зависящее от очков

Повышение сложности зависящее от очков

Такой вопрос: Есть игра, космо-шутер, при уничтожении корабля игрок получает очки, когда очки переходят определенный порог, то срабатывает...

212
Как убрать вложенность массива в PHP

Как убрать вложенность массива в PHP

У меня есть данный массив:

165