W petli rysuje mi sie ok 50 jpg-ów , lecz wyswietlaja sie one dopiero jak wszystko sie sciagnie.
Chcialbym zeby pokazywalo sie zdjecie po zdjecie, wiem ze w Delphi bylo dokonczeni pracy procka przez komende jak w temacie a jak to jest w C# ?
Nie do konca rozumiem, co napisales, ale z nazwy metody w deplhi rozumiem, ze program zawiesza ci sie na czas sciagniecia? Zrob osobny watek sciagania.
Mam :
Application.DoEvents() ;
Chodzilo mi o to ze przy wyswietlaniu fotek program czeka az siagna sie wszystkie w petli i dopiero pozniej je wyswietla, a ja chce zeby po sciagnieciu jednej fotki juz mozna bylo ja widziec na ekranie.
A jak wyglada Twoja petla? Zreszta jak zrobisz osobny watek, to program bedzie sobie dzialal, a sciagac sie bedzie w miedzyczasie - jest to lepsze rozwiazanie.
foreach (string strona in strony)
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(ikonki[j]);
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream vStream = response.GetResponseStream();
System.Drawing.Bitmap vBitmap = new System.Drawing.Bitmap(vStream);
obrazki[j] = new PictureBox();
obrazki[j].Size = new System.Drawing.Size(100, 100);
if (j % 5 == 0)
{
obrazki[j].Location = new System.Drawing.Point(szer, wys+=200);
szer = 1;
}
else
{
obrazki[j].Location = new System.Drawing.Point(szer, wys);
szer += 110;
}
obrazki[j].SizeMode = PictureBoxSizeMode.StretchImage;
obrazki[j].Image = vBitmap;
this.Controls.Add(obrazki[j]);
j++;
progressBar1.Value = j;
Application.DoEvents();
}
W tablicy mam linki do pliczków i jade sobie petelką , sciagam je do bitmapy i wrzucam do dynamicznego pictureboxa.
Tylko chcialbym jeszcze teraz zrobic tak ze po kliknieciu na ten obrazek cos sie dzieje , czyli musze obsluzyc zdarze Click() , jak to tu podpiac?
Ja bym to zrobil w osobnym watku, byloby i elegancko i by dzialalo. Zdarzenia podpinasz tak:
obrazki[i].Click += new EventHandler(metoda_obslugujaca_zdarzenie);
```
johny_bravo napisał(a)
Ja bym to zrobil w osobnym watku, byloby i elegancko i by dzialalo. Zdarzenia podpinasz tak:
obrazki[i].Click += new EventHandler(metoda_obslugujaca_zdarzenie);
Jakis prosty przykladzik jak uzyc tej metody obslugujacej zdarzenie:)
void MojaMetodaObslugujacaZdarzenie(object sender, EventArgs args)
{
MessageBox.Show("UWAGA! Wlasnie gdzies kliknales ;P");
}
...
obrazki[i].Click += new EventHandler(MojaMetodaObslugujacaZdarzenie);
```
johny_bravo napisał(a)
void MojaMetodaObslugujacaZdarzenie(object sender, EventArgs args)
{
MessageBox.Show("UWAGA! Wlasnie gdzies kliknales ;P");
}
...
obrazki[i].Click += new EventHandler(MojaMetodaObslugujacaZdarzenie);
Super dzieki, a sluchaj mam przycisk i pod tym przyciskiem stworzona tablica bitmap, leci saobie petelka i rysuje mi bitmapki na panelu, teraz chcialem zrobic cos takiego ze jezeli ktos zmaksymalizuje program to chcialbym te bitmampki przerysowac jezcze raz zeby np ilosc ich w poziomie byla uzalezniona od szerokosci panelu. I w zwiazku z tym pytanie jezeli mam tablice pod zdarzeniem onclick przycisku pierwszegoi chce przekazac ta tablice zeby bylo mozna do niej sie dotsac na poziomie zdarzenia Form.Onresize.
Czyli mam zdarzenie:
private void Form1_Resize(object sender, EventArgs e)
{
Tu jest powiedzmy tablica_nr_1;
}
i:
private void Form1_Resize(object sender, EventArgs e)
{
Jak uzyc tablicy_nr_1 tutaj ?
}
I w tym zdarzenie chcialbym tez miec ta tablice ktora stworzylem wi nnym zdarzeniu.
Jak ja tu przekazac?
Zakladam, ze te bitmapki sa podpiete do PictureBoxow? Wtedy mozesz iterowac przez kolekcje kontrolek formatki i podejmowac konkretne akcje, jesli to PictureBox:
foreach(Control vControl in Controls)
if(vControl is PictureBox)
{
PictureBox vPictureBox = (PictureBox) vControl;
zrob_cos(vPictureBox.Bitmap);
}
```
johny_bravo napisał(a)
foreach(Control vControl in Controls)
if(vControl is PictureBox)
{
PictureBox vPictureBox = (PictureBox) vControl;
zrob_cos(vPictureBox.Bitmap);
}
Czyli mogę np odwolac sie do juz narysowanych kontrolek i np je wyczyscic i porozmieszczac inaczej?
Tak, tylko jak bedziesz czyscil to gdzies sobie zapamietaj tymczasowo ta bitmapke, zeby ci nie zginela. Wszystkie kontrolki sa w kolekcji Controls formatki.
johny_bravo napisał(a)
Tak, tylko jak bedziesz czyscil to gdzies sobie zapamietaj tymczasowo ta bitmapke, zeby ci nie zginela. Wszystkie kontrolki sa w kolekcji Controls formatki.
A nie lepiej przekazac kolekcje bitmap bo ja ja mam zapamietaną i z niej rysuje na formatce, wiec nie prosciej przekazac kolekcje , wyczyscic panel i na nowo narysowac?
Jak masz ja zapamietana to mozesz z niej skorzystac. Tylko czysczenie i wstawianie od nowa zajmie troche wiecej czasu niz po prostu zmiana wlasciwosci PictureBox'ow.
Napisales taki kod:
foreach(Control vControl in Controls)
if(vControl is PictureBox)
{
PictureBox vPictureBox = (PictureBox) vControl;
zrob_cos(vPictureBox.Bitmap);
}
A jak np mam 4 panele i chcialbym sie odwolac np do kontrolek na panelu3 ?
No to:
foreach(Control vControl in Panel3.Controls)...
Hmmmm a patrz mam cos w pętli wyswietlanie picturebox-ow:
obrazki[j].Click += new EventHandler(Klikniecie);
z obsluga zdarzenia Click, obsluga
wyglada np tak:
void Klikniecie(object sender, EventArgs args)
{
MessageBox.Show("lalala");
}
Jak sie w tej metodzie odwolac do obiektu z ktorego nastapilo klikniecie , powiedzmy ze po klikniecie bede chcial otrzymac nazwe fotki czy numer pictureboxa z ktorego nastapilo klikniecie?
P.S.
Jesteś lepszy niz msdn :-)