Coś na styl Application.ProcessMessages() z Delphi ..

0

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# ?

0

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.

0

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.

0

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.

0
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?

0

Ja bym to zrobil w osobnym watku, byloby i elegancko i by dzialalo. Zdarzenia podpinasz tak:

obrazki[i].Click += new EventHandler(metoda_obslugujaca_zdarzenie); ```
0
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:)
0
void MojaMetodaObslugujacaZdarzenie(object sender, EventArgs args) { MessageBox.Show("UWAGA! Wlasnie gdzies kliknales ;P"); } ... obrazki[i].Click += new EventHandler(MojaMetodaObslugujacaZdarzenie); ```
0
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?
0

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); } ```
0
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?
0

Tak, tylko jak bedziesz czyscil to gdzies sobie zapamietaj tymczasowo ta bitmapke, zeby ci nie zginela. Wszystkie kontrolki sa w kolekcji Controls formatki.

0
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?

0

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.

0

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 ?

0

No to:

foreach(Control vControl in Panel3.Controls)...

0

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 :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1