NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s podporou uplatnění od 0 Kč. Více informací.
Avatar
Dog
Člen
Avatar
Dog:28.9.2016 16:45

Č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.9.2016 16:46
 
Odpovědět
28.9.2016 16:45
Avatar
HONZ4
Člen
Avatar
HONZ4:28.9.2016 19:34
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
28.9.2016 19:34
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:28.9.2016 20:39

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.9.2016 20:39
Programátor je stroj k převodu kávy na kód.
Avatar
Dog
Člen
Avatar
Dog:28.9.2016 22:18

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.9.2016 22:18
Avatar
HONZ4
Člen
Avatar
Odpovídá na Dog
HONZ4:28.9.2016 22:41

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.9.2016 22:41
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:28.9.2016 22:51

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

Nahoru Odpovědět
28.9.2016 22:51
the cake is a lie
Avatar
Dog
Člen
Avatar
Dog:28.9.2016 22:54

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.9.2016 22:55
 
Nahoru Odpovědět
28.9.2016 22:54
Avatar
HONZ4
Člen
Avatar
Odpovídá na Dog
HONZ4:28.9.2016 22:56

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.9.2016 22:56
Avatar
Dog
Člen
Avatar
Dog:28.9.2016 23:20

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

 
Nahoru Odpovědět
28.9.2016 23:20
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Dog
Petr Čech:28.9.2016 23:23

Panel.Children tuším.

Nahoru Odpovědět
28.9.2016 23:23
the cake is a lie
Avatar
HONZ4
Člen
Avatar
Odpovídá na Dog
HONZ4:28.9.2016 23:23
foreach(Control objekt in mujPanel.Controls)
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.9.2016 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.