Diskuze: Event pro všech 170 picture boxů ve formu

C# .NET .NET (C# a Visual Basic) Event pro všech 170 picture boxů ve formu American English version English version

Avatar
Dog
Člen
Avatar
Dog:

Čaue, mám dotázek, jak vytvořit při inicializaci objektu event pro všechny pictureboxy v daném formu? Kód níže nic nedělá :-)

public partial class Builder : Form
{
    public Builder()
    {
        InitializeComponent();
        foreach(Control objekt in this.Controls)
        {
            if (objekt is PictureBox)
               objekt.Click += new System.EventHandler(PicClick);
        }
    }

    private void PicClick(object sender, EventArgs e)
    {
        pictureBox1.Image = Properties.Resources.yellow;
    }
}
Editováno 28. září 16:46
 
Odpovědět 28. září 16:45
Avatar
HONZ4
Člen
Avatar
HONZ4:
private void PicClick(object sender, EventArgs e)
    {
        PictureBox pic = (PictureBox)sender;
            pic.Image = Properties.Resources.yellow;
    }

mimochodem, pokud máš na formuláři 170 pictureboxů, asi to nebude úplně správně řešená aplikace

 
Nahoru Odpovědět  +3 28. září 19:34
Avatar
krepsy3
Redaktor
Avatar
krepsy3:

Honza má naprostou pravdu, měl bys mu označit řešení.

Ještě vysvětlení - ty jsi v původní eventové metodě měnil Properties.Re­sources.yellow kontrolce pictureBox1. Objekt, který eventovou metodu zavolá s sebou metoda nese, je to parametr "sender" metody. Musíš ho přetypovat na příslušnou kontrolku, v tomto případě na PictureBox. Na něj pak aplikuješ změnu vlastnosti Image ;)

Nahoru Odpovědět 28. září 20:39
Programátor je stroj k převodu kávy na kód.
Avatar
Dog
Člen
Avatar
Dog:

Cilem je samozrejme, aby zmenil barvu kazdej picbox, kdyz na nej kliknu, ten pictureBox1.Image = Properties.Re­sources.yellow; jsem tam mel jen proto, abych věděl, jestli to funguje alespon trosku...

Teď se změní barva pouze u picboxu1, kvuli eventu primo na nej, ale u ostatních to nedělá nic.. :(

public partial class Range_Builder : Form
{
    public Range_Builder()
    {
        InitializeComponent();
        foreach(Control objekt in Controls)
        {
            if (objekt is PictureBox)
               objekt.Click += new EventHandler(PicClick);
        }
        pictureBox1.Click += PicClick;      //tohle funguje, ale jen pro prvni picbox
    }


    private void PicClick(object sender, EventArgs e)
    {
        PictureBox pic = (PictureBox)sender;
        pic.Image = Properties.Resources.yellow;
    }
}
 
Nahoru Odpovědět 28. září 22:18
Avatar
HONZ4
Člen
Avatar
Odpovídá na Dog
HONZ4:

pokud jsem to pochopil správně, tak chceš, aby se po kliknutí na jakýkoliv box, změnil jeho obrázek. Pokud je to tak, tak to fungovat musí.

 
Nahoru Odpovědět 28. září 22:41
Avatar
Petr Čech (czubehead):

Kromě this.Controls musíš ještě iterovat skrz všechny ostatní kontrolky, např Panely a podobná udělátka.

Nahoru Odpovědět 28. září 22:51
Why so serious? -Joker
Avatar
Dog
Člen
Avatar
Dog:

Vážně to nefunguje :( Netuším čím to je :( Ty obrázky jsou zarovnaný v tabulce, tím to ale nebude :)

Petr: Tohle jsem ještě nezkoušel... 5min

Editováno 28. září 22:55
 
Nahoru Odpovědět 28. září 22:54
Avatar
HONZ4
Člen
Avatar
Odpovídá na Dog
HONZ4:

A není to tak jak píše Petr, že ty boxy nemáš přímo na formuláři, ale třeba v panelu?

 
Nahoru Odpovědět 28. září 22:56
Avatar
Dog
Člen
Avatar
Dog:

Tak je to tím panelem :-) Jen netuším jak v něm vyhledávat pomocí foreach

 
Nahoru Odpovědět 28. září 23:20
Avatar
Nahoru Odpovědět 28. září 23:23
Why so serious? -Joker
Avatar
HONZ4
Člen
Avatar
Odpovídá na Dog
HONZ4:
foreach(Control objekt in mujPanel.Controls)
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 28. září 23:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.