#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