[ cesare @ 08.04.2010. 21:34 ] @
Pozdrav svima !!!!

Uopšte nisam radio sa grafikom u .NET-u, a hteo bih da napravim jednu svoju kontrolu. U toj kontroli treba da bude PictureBox i u sredini njega jedan Label. PictureBox je početno prazan (svojstvo Image nije definisano). Kada korisnik pređe mišem preko PictureBox-a on treba da prikaže neku sliku. Ono što meni treba je da i Label bude vidljiv u tom trenutku, jer on pokazuje tekst, ali da se istovremeno i on "ofarba" u boju slike koja je učitana u PictureBox, tj da i njegova pozadina prikaže onaj deo slike koji prekriva inače, a da tekst ostane vidljiv. Da li je ovo moguće izvesti i kako ?

Unapred hvala ...

[ mish_ns @ 08.04.2010. 22:20 ] @
Mozda ce ti biti lakse da postavis button i dodas sliku u njega preko Image ili BackgroundImage osobina za dugme.
Pa probaj nesto sa MouseLeave i MouseEnter dogadjajima.

Nesto slicno ovome (ovo je za rollover)
Code:

        private void button1_MouseLeave(object sender, EventArgs e)
        {
            button1.Image = Properties.Resources.slika1;
        }

        private void button1_MouseEnter(object sender, EventArgs e)
        {
            button1.Image = Properties.Resources.slika2;
        }

Prethodno importujes slike u projekat.
[ bojan21 @ 09.04.2010. 02:58 ] @
Ukoliko bas hoces da koristis PictureBox onda probaj ovako:

Code:

        private void pictureBox1_MouseEnter(object sender, EventArgs e)
        {
            pictureBox1.Image = Properties.Resources.puzzle;    //ucitavas sliku iz resursa
            label1.Parent = pictureBox1;                                //ovo ti omogucava transparentnost labela (posto nije podrzana na 'normalan nacin')
            label1.Visible = true;                                          // i naravno, prikazujes label
        }

        private void pictureBox1_MouseLeave(object sender, EventArgs e)
        {
            pictureBox1.Image = null;            //brises sliku iz pictureBoxa
            label1.Visible = false;                 //sakrivas label
        }


Naravno, ovaj deo:
Code:

label1.Parent = pictureBox1; 

si mogao da stavis u OnLoad metodu (pa da ne pises u pictureBox.MouseEnter) da se ne bi bezveze, svaki naredni put kad se misem predje preko pictureBoxa to izvrsavalo (dovoljno je samo jednom).
Pozdrav

edit: Zaboravih da napomenem, svojstvo labela BackColor treba da je postavljeno na Transparent.

[Ovu poruku je menjao bojan21 dana 09.04.2010. u 10:39 GMT+1]
[ mish_ns @ 09.04.2010. 12:04 ] @
Mislim da ovo sa label BackColor postavljenim na Transparent nece raditi...

Kada je BackColor neke kontrole postavljen na Transparent on uzima boje Parent kontejnera. PictureBox nije kontejner.
Tako da labela preuzima kao BackColor boju forme koja je sivkasta...

Ako vec hoces na taj nacin probaj ovako:

1. koristi Panel kontrolu
2. postavi BackGroundImage osobinu tj. sliku koju hoces da prikazes, i BackGroundImageLayout postavi na Center
3. dodaj labelu na panel
4. u Form1() dodaj
Code:

        public Form1()
        {          
            InitializeComponent();
            panel1.BackgroundImage = null;
        }

5. dodaj Event za labelu
Code:

        private void label1_MouseEnter(object sender, EventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.tvojaslika;       
        }

6. i jos jedan za panel
Code:

         private void panel1_MouseLeave(object sender, EventArgs e)
        {
            panel1.BackgroundImage = null;
        }



PS. Ako ti je nesto pomoglo ili odmoglo javi, cisto da bi i drugi ljudi znali sta da iskoriste!!!
[ bojan21 @ 09.04.2010. 20:27 ] @
Citat:

Mislim da ovo sa label BackColor postavljenim na Transparent nece raditi...

Kada je BackColor neke kontrole postavljen na Transparent on uzima boje Parent kontejnera. PictureBox nije kontejner.
Tako da labela preuzima kao BackColor boju forme koja je sivkasta...


Kod sam proverio i radi sasvim lepo. A sto se tice ovog za BackColor svojstvo, ukoliko mu nije dodeljena vrednost, ono se nasledjuje od Parent kontrole koja pritom uopste ne mora da bude kontejner.
Pozdrav