[ bmanj @ 11.01.2010. 13:44 ] @
Pozdrav,

Na formi treba da prikazem nekoliko slika. Slike se nalaze u nekom direktorijumu (c:\slike).

Problem je sto ce se za vreme rada programa broj slika menjati (nekad ce biti 3, nekad 5).

Predpostavljam da moram da za svaku sliku napravim po jedan PictureBox. To je u redu, ali ono sto me muci je da ne znam kako dalje da radim sa slikama, posto moram da ih rasporedim na formi... Ne znam kako da im "pristupim" i definisem poziciju na formi.

Da li mozete da mi pomognete kako to da uradim?

Hvala unapred!
[ Igor Gajic @ 11.01.2010. 14:08 ] @
Pod pretpostavkom da u resursima imas dodatu sliku sa nazivom strip.

Na formu dodas FlowLayoutPanel i dodas sledeci kod:

Code:

            Image image = Properties.Resources.strip;  // ovde mozes da ucitas sliku iz fajla sa file sistema....

            PictureBox picture1 = new PictureBox()
            {
                Image = image,
                Width = image.Width,
                Height = image.Height
            };

            PictureBox picture2 = new PictureBox()
            {
                Image = image,
                Width = image.Width,
                Height = image.Height
            };

            this.flowLayoutPanel1.Controls.Add(picture1);
            this.flowLayoutPanel1.Controls.Add(picture2);


Ovo ce dodati 2 pictureBox-a na formu i pri tome ce ih "lepo" rasporediti. E ovo je samo grubo objasnjenje kako i sta treba uraditi...
[ bmanj @ 11.01.2010. 14:15 ] @
To mi je sve okej, ali stvar je u tome da cu nekad imati 3 nekad 5, nekad 7 slika. Ovo tvoje je "na tvrdo" napisano.

Razumem da bih sve provukao kroz neku for petlju, tipa

Code:

int brojSlika = 10; // recimo da sam negde ranije izbrojao da imam 10 slika u onom folderu

for (int i = 0; i < brojSlika; i++) {

  PictureBox pb = new PictureBox();
  pb.Name = "PictureBox" + i.ToString();

}



Kako bih sada pristupio PictureBoxu koji ima ime PictureBox4?



[ bmanj @ 11.01.2010. 15:00 ] @
Da li bi se ovo moje resavalo sa refleksijom?
[ Igor Gajic @ 11.01.2010. 15:36 ] @
Ne moras preko refleksije mozes i preko:

Code:



int brojSlika = 10; // recimo da sam negde ranije izbrojao da imam 10 slika u onom folderu

for (int i = 0; i < brojSlika; i++) {

  PictureBox pb = new PictureBox();
  pb.Name = "PictureBox" + i.ToString();
  pb.Image = ....
  pb.Width = ...
 
 this.flowLayoutPanel1.Controls.Add(pb);   // <= !!!
}


PictureBox pb2 = (PictureBox)this.flowLayoutPanel1.Controls.Find("PictureBox2", false)[0];


s tim da moras da nasetujes property Name u svim PictureBox-ovima na "PictureBox1", "PictureBox2", ....

[Ovu poruku je menjao Igor Gajic dana 11.01.2010. u 16:52 GMT+1]
[ bmanj @ 27.01.2010. 20:33 ] @
Pozdrav!

Ovo mi je ponovo postalo aktuelno, ako mozete da mi pomognete da resim.

Dakle, imam formu. Na njoj se nalaze

1. Dugme sa natpisom "Dodaj novi"
2. Combobox
3. Text polje
4. dugme sa natpisom "Postavi".

Isto tako, u folderu C:\Slike mi se nalazi nekoliko slika (10-20), koje imaju imena 1.png, 2.png, 3.png, itd.

Kada kliknem na dugme "Dodaj novi", kreira se PictureBox, i u njega se ubaci slika 1.png. Isto tako, u Combobox se dodaje novi item, sa PictureBox1 (za prvu sliku), PictureBox2 (za drugu), itd.


Ono sto mi zapravo treba je da u text polje upisem broj, i da u Comboboxu izaberem naziv slike i kada kliknem na drugo dugme, da je postavim na poziciju koju sam upisao u text polje (dovoljna je samo X pozicija, da ne komplikujemo stvari).

Evo ga i code...

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DinamickeKomponente
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int brojSlika = 0;

        
        /*
         * Ovde kreira pictureboxove i ubacuje slike
         */ 
        private void button1_Click(object sender, EventArgs e)
        {
            PictureBox pb = new PictureBox();
            pb.Name = "PictureBox" + (++brojSlika);
            pb.Size = new Size(100, 100);
            pb.Image = Image.FromFile(@"C:\slike\" + brojSlika.ToString() + ".png");
            this.Controls.Add(pb);
            comboBox1.Items.Add(pb.Name);
        }

        
        /*
         * Ovde treba da postavi PICTUREBOX na visinu u pixelima koja je upisana u textpolje
         * */
        private void button2_Click(object sender, EventArgs e)
        {
            // help!!!
        }
    }
}


Da li mozete da mi pomognete oko ovoga?

Isto tako, posto je ovo samo deo jednog (za mene) malo veceg resenja, bitno mi je da bude sto sto je moguce optimizovanije i da se odigrava sto je moguce brze.


Iskreno Hvala unapred!



[Ovu poruku je menjao bmanj dana 28.01.2010. u 15:59 GMT+1]