Zmiana ustawień wielu PictureBox za pomocą pętli w Visual Studio C#

0

Cześć. Tak się zastanawiam.

Mam w programie kilkanaście PictureBox nazwanych PictureBoxObjectX (gdzie X to liczba od 1 do 20). Czy jest możliwość wpłynięcia na ich ustawienia za pomocą pętli? Niestety nie jest dopuszczalne nazwanie kontrolek (komponentów?) PictureBoxObject[X]. Ewentualnie jakoś inaczej nazwać?

Chodzi mi o coś takiego:

for (int petla = 1; petla < 21; petla++)
{
 // zmień ustawienie każdego PictureBoxObjectX.Visible = true na false
}

Przydałoby się takie coś, gdyż inaczej muszę do każdego PictureBox ręcznie tworzyć linijkę kodu (na chwilę obecną, gdyż nie wiem, czy można to skrócić). Z góry dzięki za odpowiedź!

0

Masz te pictureBoxy w jakims panelu np. gridzie. No to piszesz tak:

foreach (var pictBox in grid1.Children.OfType<PictureBox>())
pictBox.Visible=true;
0
kzkzg napisał(a):

Masz te pictureBoxy w jakims panelu np. gridzie. No to piszesz tak:

foreach (var pictBox in grid1.Children.OfType<StackPanel>())
pictBox.Visible=true;

Bardziej chodzi mi o to, że PIctureBoxy są ikonami jednostek w grze którą tworzę i w zależności od strony którą reprezentują mogę je albo ukryć albo schować, także coś tego typu mi chodzi po głowie:

for (int petla = 1; petla < 21; petla++)
{
 (if petla != 1 && petla != 5) // zmień ustawienie PictureBoxObjectX.Visible = false; (gdzie X jest różne od 1 i 5, gdyż są to PictureBoxy reprezentujące ikony gracza)
}

Cała mapa zwana PictureBoxMainMap znajduje się na panelu zwanym PanelUnderMap. Jednakże zależy mi na tym, aby nie każdego PictureBoxa znajdującego się na mapie ukrywać. Da radę w kodzie jakoś je pogrupować np PictureBoxObject1 oraz PictureBoxObject5 - w pierwszej grupie a PictureBoxObject2-4 i PictureBoxObject6-20 do innej grupy i wpływać na ustawienia całej takiej grupy?

0

Nie wiem może o coś takiego Ci chodzi

  BindingList<PictureBox> pictureBoxes;
        public Form1()
        {
            InitializeComponent();

            pictureBoxes = new BindingList<PictureBox>() { pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5 };

            pictureBox1.BackColor = Color.Red;
            pictureBox2.BackColor = Color.ForestGreen;
            pictureBox3.BackColor = Color.Azure;
            pictureBox4.BackColor = Color.Purple;
            pictureBox5.BackColor = Color.Honeydew;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (var item in pictureBoxes)
            {
                var name = item.Name;
                if (name == "pictureBox5")
                {
                    item.BackColor = Color.Yellow;
                }
            }
        }
0

Mozesz wykorzystać właściwość Tag picturebox'a, przypisać tam jakąs grupę, nawet kilka np:

pictureBox1.Tag="gracz1" + "rycerze";

I teraz jak chcesz wybrać pictureboxy gracza1 to piszesz:

foreach (var pictBox in grid1.Children.OfType<PictureBox>().Where(o=>o.Tag.Contains("gracz1"))

1 użytkowników online, w tym zalogowanych: 0, gości: 1