Poslao: 12 Jul 2006 20:24
|
offline
- umpirsky
- Počasni građanin
- 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.
|
|
Poslao: 12 Jul 2006 23:02
|
offline
- snoop
- Genghis Khan
- 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]
|
|
|
|
Poslao: 13 Jul 2006 15:08
|
offline
- umpirsky
- Počasni građanin
- 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???
|
|
|
|
Poslao: 13 Jul 2006 21:07
|
offline
- snoop
- Genghis Khan
- 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.
|
|
|
|
Poslao: 14 Jul 2006 00:24
|
offline
- umpirsky
- Počasni građanin
- 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???
|
|
|
|
Poslao: 14 Jul 2006 01:12
|
offline
- snoop
- Genghis Khan
- 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.
|
|
|
|
Poslao: 14 Jul 2006 22:51
|
offline
- umpirsky
- Počasni građanin
- 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...???
|
|
|
|
Poslao: 15 Jul 2006 00:18
|
offline
- snoop
- Genghis Khan
- 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.
|
|
|
|
Poslao: 15 Jul 2006 13:16
|
offline
- umpirsky
- Počasni građanin
- 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.
|
|
|
|
Poslao: 15 Jul 2006 13:35
|
offline
- snoop
- Genghis Khan
- 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 .
|
|
|
|