Nejčastěji odpovídající uživatel
pictureBox & imageList?

Dotaz
-
Dobrý den, potřeboval bych radu. Tvořím aplikaci ve Microsoft Visual C# 2010 Express a chtěl bych přiřazovat kazdému pictureBoxu (konkrétně na jeho BackgroundImage) jednotlivý obrázek z imageList1. Bohužel, se mi to nepovedlo napsat jinak než takto:
public void prirad_obr()
{
pictureBox1.BackgroundImage = imageList1.Images[0];
pictureBox2.BackgroundImage = imageList1.Images[1];
pictureBox3.BackgroundImage = imageList1.Images[2];
pictureBox4.BackgroundImage = imageList1.Images[3];
pictureBox5.BackgroundImage = imageList1.Images[4];
pictureBox6.BackgroundImage = imageList1.Images[5];
pictureBox7.BackgroundImage = imageList1.Images[6];
pictureBox8.BackgroundImage = imageList1.Images[7];
pictureBox9.BackgroundImage = imageList1.Images[0];
pictureBox10.BackgroundImage = imageList1.Images[1];
pictureBox11.BackgroundImage = imageList1.Images[2];
pictureBox12.BackgroundImage = imageList1.Images[3];
pictureBox13.BackgroundImage = imageList1.Images[4];
pictureBox14.BackgroundImage = imageList1.Images[5];
pictureBox15.BackgroundImage = imageList1.Images[6];
pictureBox16.BackgroundImage = imageList1.Images[7];
}Nevíte jak to napsat např. přes nějaký cyklus? Předem děkuji za odpověď.
- Upravený gunyy čtvrtek 14. června 2012 18:52
Odpovědi
-
Ano jde to, jestli dobře rozumím otázce.
Tato funkce vám najde Control podle názvu. Za controlId dosadíte název pictureBoxu a za container pravděpodobně this.
public Control FindControl(string controlId, Control container) { if (container.Name == controlId) return container; foreach (Control control in container.Controls) { Control c = FindControl(controlId, control); if (c != null) return c; } return null; }
Teď můžete už použít jednoduchý cyklus. Za x dosadíte index toho vašeho Image v listu, kde x se vám bude přičítat od 0 do 7, ale to věřím že už zvládnete sám. :)
for (int i = 1; i < 17; i++) ((PictureBox)FindControl("pictureBox" + i, this)).BackgroundImage = imageList1.Images[x];
Nevýhoda tohoto je, že tato cesta je poměrně pomalé a nefeketivní. Lepší je si nejdříve všechny pictureBox nahrát do pole a pak je používat z pole.
David Roško- Upravený David Roško úterý 19. června 2012 0:05
- Označen jako odpověď gunyy středa 20. června 2012 13:02
Všechny reakce
-
-
To jsem právě zkoušel ale když to tak udělám tak mi to vyhodí chybu, že nezná pictureBox a nějaké [x] to nebere, zkoušel jsem to i ukládat do stringové proměnné, jenže i když tam uložím správný název pictureBoxu tak nemůžu pracovat s událostmi jako je např. ten BackgroundImage
-
Ano jde to, jestli dobře rozumím otázce.
Tato funkce vám najde Control podle názvu. Za controlId dosadíte název pictureBoxu a za container pravděpodobně this.
public Control FindControl(string controlId, Control container) { if (container.Name == controlId) return container; foreach (Control control in container.Controls) { Control c = FindControl(controlId, control); if (c != null) return c; } return null; }
Teď můžete už použít jednoduchý cyklus. Za x dosadíte index toho vašeho Image v listu, kde x se vám bude přičítat od 0 do 7, ale to věřím že už zvládnete sám. :)
for (int i = 1; i < 17; i++) ((PictureBox)FindControl("pictureBox" + i, this)).BackgroundImage = imageList1.Images[x];
Nevýhoda tohoto je, že tato cesta je poměrně pomalé a nefeketivní. Lepší je si nejdříve všechny pictureBox nahrát do pole a pak je používat z pole.
David Roško- Upravený David Roško úterý 19. června 2012 0:05
- Označen jako odpověď gunyy středa 20. června 2012 13:02
-
-