Jednostavno se ne poziva !

1

Jednostavno se ne poziva !

offline
  • Pridružio: 01 Apr 2005
  • Poruke: 797
  • Gde živiš: Niš

Imam neki PictureBox i hoću da dodam funkciju za njega koja se poziva kad se klikne na njega, ali ona se nikako ne poziva, čak i kada je vežem za formu. Nije mi prvi put da radim ovako nešto, ali jednostavno se ne poziva, stavljao sam breakpoint i uverio se. Isto je i sa mouse click dogadjajem.
Funkcija je:
        private void klik(object sender, EventArgs e)         {             i = (i + 1) % fi.Length;    //ovde sam stavljao breakpoint             slide(fi[i]);             this.Refresh();         }
Funkcija se poziva “Occurs when the component is clicked”.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Uradi desni click na ime funkcije 'klik' i stisni Go to Reference.

Ako te ne odvede na Referencu te funkcije, onda nije povezan event handler sa funkcijom koju treba da pokrene.

Evo ti jedan primer

PictureBox pic = new PictureBox(); // Namestanja za veicinu PBox kontrole, ime, lokacija... this.Controls.Add(pic); // Dodaje PictureBox na formu // Dodaj event handler za klik pic.MouseUp += new MouseEventHandler(pic_MouseUp); // Funkcija koja reaguje na MouseUp event private void pic_MouseUp(object sender, MouseEventArgs e) {     MessageBox.Show("Push me Iam clean...."); }

I pocni da koristis code tagove kada ubacujes kod:

[ code]moj kod...[/ code]



offline
  • Pridružio: 01 Apr 2005
  • Poruke: 797
  • Gde živiš: Niš

Mislim da je problem u tome što je svo vreme aktivna f-ja "onLoad", pa se ova ne poziva.
Ne znam kako ovo da izbegnem???

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Kako je aktivan event onLoad sve vreme?

Ne moze on biti aktivan sve vreme. On se dogodi pri ucitavanju forme i ne pojavljuje se vise do ponovnog ucitavanja forme.

Daj ceo kod da vidim, naravno, stavi kod izmedju code tagova.

Dopuna: 13 Jul 2006 22:07

Mozda ti i ovo pomogne.

[Link mogu videti samo ulogovani korisnici]

Koliko se secam, rekao si da radis picture slide show.

offline
  • Pridružio: 01 Apr 2005
  • Poruke: 797
  • Gde živiš: Niš

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace Slide_Show {     public partial class Form2 : Form     {         public String root;         public String size;         public decimal sekunde;         public bool rec;         FileInfo[] fi;         public Form2()         {             InitializeComponent();         }         private void L(object sender, EventArgs e)         {             Loadovanje();         }         private void IzFoldera(String put)         {             DirectoryInfo dir = new DirectoryInfo(put);             fi = dir.GetFiles();             for (int i = 0; i < fi.Length;i++)             {                 slide(fi[i]);                 this.Refresh();                 System.Threading.Thread.Sleep(1000 * (Convert.ToInt32(sekunde)));             }         }         private void IzFolderaRec(String put)         {             DirectoryInfo dir = new DirectoryInfo(root);                 IzFoldera(root);                 foreach (DirectoryInfo di in dir.GetDirectories())                 {                     root = di.FullName;                     IzFolderaRec(root);                 }         }         private void slide(FileInfo fi)         {             if (fi.Extension != ".db" && (fi.Extension.ToLower()==".jpg"||fi.Extension.ToLower()==".jpeg"||fi.Extension.ToLower()==".gif"||fi.Extension.ToLower()==".bmp"||fi.Extension.ToLower()==".wmf"||fi.Extension.ToLower()==".png"))             pictureBox1.Image = Image.FromFile(fi.FullName);         }         private void Loadovanje()         {             switch (size)             {                 case "Stretch":                     pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;                     break;                 case "Center":                     pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;                     break;                 default:                     pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;                     break;             }             if (!rec)             {                 IzFoldera(root);//bez rekurzije             }             else             {                 IzFolderaRec(root);//sa rekurzijom             }         }         private void klik(object sender, EventArgs e)         {             MessageBox.Show("Push me Iam clean....");//ne poziva se zbog loada koji je aktivan         }     } }

Ovo je kod za formu2 čiji je owner forma1 i koja se poziva pri startovanju slide show-a.
Mislim da ne može da se handluje drugi događaj dok se ne izađe iz f-je koja obrađuje prvi događaj.
Ali setio sam se da mi druga forma i nije neophodna, može jednostavno da iskoči picBox kad se startuje show...
Ali voleo bih da saznam ovo sa događajima.

Dopuna: 14 Jul 2006 1:24

Izgleda da mi se baš ne da.
Sve sam lepo sredio sa jednom formom, samo još da picture box postavim na Full-Screen bez dodatne forme.Kako???

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Pod uslovom da na Form2 imas pictureBox1 u koji ce se ucitavati slike.

Neka konstruktor Form2 izgleda ovako
        public Form2()         {             InitializeComponent();          pictureBox1.MouseUp += MouseEventHandler(klik); // kreira mouseup even handler         }

Dodaj na formu Timer i postavi mu Enable property na true i Interval na vreme koliko zelis da ceka.

Dodaj sledeci kod za Timer kontrolu:
      private void timer1_Tick(object sender, System.EventArgs e)       {          FileInfo[] fi;          DirectoryInfo dir = new DirectoryInfo(put);          fi = dir.GetFiles();          slide(fi[j]);                    j++;                    if (j==fi.Length) timer1.Enabled = false; // kada smo dosli do kraja slide show-a, zaustavi Timer       }

Deklarisi globanu promenljivu j tipa int koja ce sluziti umesto for petlje.
Inicijalizuj pocetnu vrednost promenljive j na 0;

Ostaje samo problem za prikazivanje slike na klik na nju, a za to nam treba samo putanja do iste.

Promeni f-ju slide da izgleda ovako
      private void slide(FileInfo fi)       {          if (fi.Extension.ToLower()==".jpg")          {             p.Image = Image.FromFile(fi.FullName);             p.Tag = fi.FullName; // trenutno ime slike          }       }

F-ja za klik sada izgleda ovako
      private void klik(object sender, MouseEventArgs e)       {          PictureBox p = (PictureBox)sender;          MessageBox.Show(p.Tag.ToString());       }

Koriscenjem Timera, mozes lako da zaustavljas i nastavljas slide show sa timer1.Enable = false i timer1.Enable = true, respektivno.

Nadam se da ce sada raditi. Probao sam kod mene i radilo je.
Ti jos doradi.

Dopuna: 14 Jul 2006 2:12

Ne mozes dodati picturebox bez dodatne forme.
Mora da postoji forma koja ce biti container za kontrole.

offline
  • Pridružio: 01 Apr 2005
  • Poruke: 797
  • Gde živiš: Niš

O.K. Hvala na pomoći, radi najzad, mada mi i dalje nije jasno kako se sad poziva ova f-ja za klik a ranije nije htela.
Ali novi problemi su tu:
Neće da reaguje funkcija keypress na pritisak tastera : Page Up, Page Down, Up, Down, left, Right (kursorski tasteri)...a na slova, space, esc..hoće. U čemu je problem???
private void taster(object sender, KeyPressEventArgs e)         {             if (e.KeyChar.CompareTo((char)Keys.Escape) == 0)                 this.Close();    }
ovo radi dobro, ali kad ga dobudžim ovako ne poziva se za ove gore navedene tastere, pa samim tim i ne ispituje if-ove...
        private void taster(object sender, KeyPressEventArgs e)         {             if (e.KeyChar.CompareTo((char)Keys.Escape) == 0)                 this.Close();             if ((e.KeyChar.CompareTo((char)Keys.Down) == 0) || (e.KeyChar.CompareTo((char)Keys.PageDown) == 0))             {                 StartSlideShow(gen);                 t.Stop();                 t.Start();             }             if ((e.KeyChar.CompareTo((char)Keys.Up) == 0) || (e.KeyChar.CompareTo((char)Keys.PageUp) == 0))             {                 if (random)                 {                    // slide((FileInfo)pics[index[index.Count-1]]);                 }                 else                     slide((FileInfo)pics[--i]);                 t.Stop();                 t.Start();             }             if (e.KeyChar.CompareTo((char)Keys.Space) == 0)                 t.Enabled = !t.Enabled;         }

Dopuna: 14 Jul 2006 23:51

I usput, kako da vidim šta treba da se radi na ovim projektima sa
Where software becomes money
[Link mogu videti samo ulogovani korisnici]
Kako da se učlanim...???

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Koristi KeyDown event.
Moraces izmeniti uslove u if naredbama.


softwarevalley.net je sada u demo test fazi pa jos nema nista interesantno.
Kada budemo zavrsili planirano, bice objavljeno obavestenje.

Mozes se i sada registrovati ovde, i videti kako izgleda, dok je jos u test fazi mozda nadjes koju gresku pa da je blagovremeno ispravimo.

offline
  • Pridružio: 01 Apr 2005
  • Poruke: 797
  • Gde živiš: Niš

Ali zašto za esc i space radi???I za slova, brojke...radi, a za kursore i PageUp i PageDown neće????
Nešto neće, stigo je mail, ali kad kliknem na link:
Server Error in '/' Application.

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Nije mi jasno zasto nece na KeyPress, ali na KeyDown radi. Koristi KeyDown event.
Tu radi sve osim PrintScreen-a


Kolega nesto radi pa nije uploadovao sajt. Sledece nedelje ce uploadovati sajt pa ces moci da se regujes.

Tako ti je to kada su u test fazi Smile.

Ko je trenutno na forumu
 

Ukupno su 1094 korisnika na forumu :: 85 registrovanih, 5 sakrivenih i 1004 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 015, 8u47, acatomic, ALEXV, Apok, Ares12356, babaroga, Bacac, baltazar01, bojanstros9, bufanje, bukefal, Car89, ccoogg123, cvrle312, d.arsenal321, dankisha, darkkran, darkojbn, debeli, delrey, DENIRO, Dioniss, djboj, Doca, ele, Feller, h8propaganda, Igorkg77, Ir, Ivan Campo, Jeremiah, JOntra, K-1A, Kobrim, kojotuzamku, Kubovac, kybonacci, Lester Freamon, lucko1, Marko Marković, mauglibn, mercedesamg, metallac777, milanstankovic087, mile.ilic75, milenko crazy north, milimoj, miso2709, mix1, MK10, Mrav Obrad, N.e.m.a.nj.a., Najax, neutrino, Niko Bitan, Oscar, Outis, Panter, Petarvu, Pilipenda, pisac12, PitterBg, Poof, raptorsi, Romuluss, royst33, ruma, saki80, sickmouse, sokojet, sombrero, sova72, Srna, Str2022, Strasni JA, strelac07, Titan, TRAVUNIJA, Vanderx, vathra, voja64, vranjanac29, x011, zlatkoa987