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.

http://www.codeproject.com/csharp/Thumbsuck.asp

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
http://www.softwarevalley.net
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 1149 korisnika na forumu :: 10 registrovanih, 4 sakrivenih i 1135 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: alkatraz080, Belac91, Dorcolac, kolle.the.kid, Lazarus, Mi lao shu, nenad81, RecA, Skywhaler, vathra