Выполнить итерацию и изменить все объекты формы

#c# #winforms

#c# #winforms

Вопрос:

Я создал приложение Windows forms с 6 «карточками». ‘Card’ — это класс, который я получил от System.Windows.Формы.PictureBox. Я добавил элемент с именем ‘id’.

Есть ли способ выполнить итерацию по всем объектам типа ‘Card’ и изменить значение ‘id’?

Скриншот

Определение класса приведено ниже.

     public class Card : System.Windows.Forms.PictureBox
    {
        System.Drawing.Bitmap Back = MemoryGame.Properties.Resources.MG_back;

        byte id = 0;

        public Card()
        {

            this.Image = Back;

            this.SizeMode = PictureBoxSizeMode.Zoom;

         }

        public void Flip(System.Drawing.Bitmap bitmap)
        {

            if (this.Image == Back)
            {
                this.Image = bitmap;
            }
            else
            {
                this.Image = Back;
            }
        }

        public int GetId()
        {
            return this.id;
        }

    }
  

Комментарии:

1. Идентификатор действительно недоступен или вы просто так написали его здесь?

2. Это было недоступно, и я изменил его сейчас. Оплошность с моей стороны, но меня сдерживало не это.

Ответ №1:

Вы могли бы выполнить итерацию по Controls коллекции, например:

 int counter = 0;
foreach(var card in this.Controls.OfType<Card>())
{
    card.Id =   counter;
}
  

Ответ №2:

Выполните цикл над свойством parentcontrols «Controls». Затем вы можете проверить, соответствует ли текущий элемент управления вашему типу Card.

 foreach(var control in parentControl.Controls)
{
    if(control is Card c)
    {
        c.Id = 0 /*Some new value*/
    }
}
  

РЕДАКТИРОВАТЬ: Шаблон типа, используемый в этом примере, доступен, начиная с C # 7.0