Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 20.7.2013, 12:30   #1
DocNet
Novi član
 
Član od: 19.7.2013.
Poruke: 7
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Question [C#] Program mi vaca "null" kao parametar?

Pozdrav svima

Pravim neki program za obradu slika i naleteo sam na jedan problemcic, ako vam nije problem da mi pomognete.

Nisam neki ekspert u OOP, pa se sad mucim oko prikaza slike, siguran sam da "path+file" daju sigurnu putanju, proveravao sam preko MessageBox-a, tu putanju hocu da prosledim u Form1 i prikazem sliku prvu u podrazumevanom folderu samog programa, na klik next treba da prebaci na sledecu, na previous proslu, nego se ja mucim oko ucitavanja same slike pri pokretanju, izbaci mi "value is null" gresku, ne kapiram kako moze biti null, kada sam pri inicijalizaciji same forme prvo naveo GetImages klasu, pa tek onda PropFields koja trenutno sadrzi jedan properti, u GetImages kao sto mozete videti dole u kodu implementiram properti Path iz PropFields i dajem mu vrednost putanje, dok u Form1 koristim tu putanju radi prikaza slike.

Ja bih ovo verovatno resio, nego me zanima da mi neko objasni zasto ovako nece? I da li postoji neki pametniji nacin da se ovo uradi, mozda brze itd?

Hvala

Form1.cs
Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Picture_Viewer_1._0
{
    public partial class Form1 : Form
    {
        private int counter = 0;
        private int max = 0;
        PropFields pf;
        public Form1()
        {
            InitializeComponent();

            GetImages gi = new GetImages();
            pf = new PropFields();

            pictureBox1.BackColor = Color.Transparent;
            pictureBox2.BackColor = Color.Transparent;

            this.WindowState = FormWindowState.Maximized;
        }

        //events
        private void pictureBox1_MouseHover(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Hand;
        }

        private void pictureBox2_MouseHover(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Hand;
        }

        private void pictureBox1_MouseLeave(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Arrow;
        }

        private void pictureBox2_MouseLeave(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Arrow;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.BackgroundImage = Image.FromFile(pf.Path);
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            if(counter<=0)
            counter++;

            Invalidate();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if(counter>=max)
            counter--;

            Invalidate();
        }

    }
}

GetImages.cs
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Drawing;

namespace Picture_Viewer_1._0
{
    class GetImages
    {

        public GetImages()
        {
            GetImage();
        }

        private List<string> extensions = new List<string>
        {
                ".JPG",
                ".IMG",
                ".JPEG",
                ".PNG",
                ".BMP",
                ".ICO",
                ".GIF",
                ".JPE",
        };

        private void GetImage()
        {
            PropFields pf = new PropFields();
            string path = Directory.GetParent(Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString()+@"\images\";
            DirectoryInfo dir = new DirectoryInfo(path);
            string file = dir.GetFiles()[0].ToString();

            try
            {
                foreach (string ext in extensions)
                {
                    if (Path.GetExtension(file.ToUpper()) == ext)
                    {
                        pf.Path = path + file;
                    }
                   
                }
            }
            catch (DirectoryNotFoundException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (FileNotFoundException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
PropFields.cs

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Picture_Viewer_1._0
{
    class PropFields
    {
        public string Path
        {
            get;
            set;
        }
    }
}
DocNet je offline   Odgovor sa citatom ove poruke
Stara 20.7.2013, 12:48   #2
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.085
Zahvaljeno 4.923 puta na 2.859 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

A šta ako je path "C:\folder" a fajl "fajl.txt", konkatenacija će dati "C:\folderfajl.txt" što nije putanja koja ti treba.
Za takve poslove koristi Path.Combine(folder, fajl);
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 20.7.2013, 13:13   #3
DocNet
Novi član
 
Član od: 19.7.2013.
Poruke: 7
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

Citat:
voodoo_ kaže: Pregled poruke
A šta ako je path "C:\folder" a fajl "fajl.txt", konkatenacija će dati "C:\folderfajl.txt" što nije putanja koja ti treba.
Za takve poslove koristi Path.Combine(folder, fajl);
Hvala na odgovoru i savetu, ali to nije resenje problema, nego savet za ubuduce.
DocNet je offline   Odgovor sa citatom ove poruke
Stara 20.7.2013, 13:25   #4
water wizard
Deo inventara foruma
 
Član od: 29.1.2008.
Poruke: 20.482
Zahvalnice: 433
Zahvaljeno 4.007 puta na 3.729 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

jel ti vraća null za sliku ili za filepath?
water wizard je sada online   Odgovor sa citatom ove poruke
Stara 20.7.2013, 13:55   #5
DocNet
Novi član
 
Član od: 19.7.2013.
Poruke: 7
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

Citat:
water wizard kaže: Pregled poruke
jel ti vraća null za sliku ili za filepath?
u Form1.cs

Form1_Load
this.BackgroundImage = Image.FromFile(pf.Path);

Dakle na sliku.

greska:
Value cannot be null.
Parameter name: path
DocNet je offline   Odgovor sa citatom ove poruke
Stara 20.7.2013, 14:35   #6
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.133
Zahvalnice: 649
Zahvaljeno 1.352 puta na 692 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

U formi si samo kreirao novi PropField zvani pf ali mu nisi dodelio nikakvu putanju te je pf.Path == null kada se Load pozove. Ti zapravo kolko vidim mislis da je pf globalna varijabla a ona to u stvari nije - pf koji menjas u GetImages klasi je razlicita promenljiva od pf u klasi Form.
Andross je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Andross na korisnoj poruci:
DocNet (20.7.2013)
Stara 20.7.2013, 14:50   #7
DocNet
Novi član
 
Član od: 19.7.2013.
Poruke: 7
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

Citat:
Andross kaže: Pregled poruke
U formi si samo kreirao novi PropField zvani pf ali mu nisi dodelio nikakvu putanju te je pf.Path == null kada se Load pozove. Ti zapravo kolko vidim mislis da je pf globalna varijabla a ona to u stvari nije - pf koji menjas u GetImages klasi je razlicita promenljiva od pf u klasi Form.
Hvala, resio sam tako sto sam stavio da Path pripada klasi, tj da je static, tako da sad koristim isti properti
DocNet je offline   Odgovor sa citatom ove poruke
Stara 20.7.2013, 15:40   #8
DocNet
Novi član
 
Član od: 19.7.2013.
Poruke: 7
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

Jos samo nesto,

Da li je pametno ovako koristiti listanje slika?

Kod:
private void pictureBox2_Click(object sender, EventArgs e)
        {
            if (counter <= max)
            {
                counter++; 
            }
            else
            {
                counter = -1;
                counter++;
            }
            gi.GetImage(counter);
            RenderImage();

            //Invalidate();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (counter <= max && counter>0) //5
            {
                counter--; 
            }
            else
            {
                counter = max+1;
                counter--;
            }
            gi.GetImage(counter);
            RenderImage();
            
            //Invalidate();
        }
Primetio sam da mi se forma malo refresuje pri promeni slike, sve radi ok, samo se recimo ove strelice osvezavaju, ne bih da kopiram ceo kod, jer je skoro isti, samo sam ubacio jednu metodu za iscrtavanje slike, primeticete gore u kodu, da sam u konstruktor forme ubacio da ove strelice budu transparent, odnosno da nemaju pozadinu, sad svaki put one se refreshuju, ne znam zasto Invalidate ne odradi posao?
Ovde sam ga bacio u koment, jer ne obavlja posao...
DocNet je offline   Odgovor sa citatom ove poruke
Stara 21.7.2013, 0:27   #9
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

Ja jedino što ja ovde vidim da metoda getImage() ne radi ništa tj. da radi u prazno. Niti vraća neku vrednost niti setuje vrednost. Ne znam šta si hteo da postigneš ovako?

Drugo imaš kolekciju imageList. Bolje bi ti bilo da nju koristiš. Ubacuj sve slike u imageList kolekciju i prikazuj selektovanu sliku u pictureBox na formi. Imaš mnogo načina to da implementiraš. Ja ću ti samo pokazati kako da šetaš, napred i nazad, po kolekciji.

Kod:
//btn next event
var currentImageIndex = imageList.IndexOf(pictureBox.Image);
if(currentImageIndex < imageList.Count())
    pictureBox.Image = imageList[++currentImageIndex];

//btn back event
var currentImageIndex = imageList.IndexOf(pictureBox.Image);
if(currentImageIndex  > 0)
    pictureBox.Image = imageList[--currentImageIndex];
Todors je offline   Odgovor sa citatom ove poruke
Stara 21.7.2013, 11:12   #10
DocNet
Novi član
 
Član od: 19.7.2013.
Poruke: 7
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: [C#] Program mi vaca "null" kao parametar?

Citat:
Todors kaže: Pregled poruke
Ja jedino što ja ovde vidim da metoda getImage() ne radi ništa tj. da radi u prazno. Niti vraća neku vrednost niti setuje vrednost. Ne znam šta si hteo da postigneš ovako?

Drugo imaš kolekciju imageList. Bolje bi ti bilo da nju koristiš. Ubacuj sve slike u imageList kolekciju i prikazuj selektovanu sliku u pictureBox na formi. Imaš mnogo načina to da implementiraš. Ja ću ti samo pokazati kako da šetaš, napred i nazad, po kolekciji.

Kod:
//btn next event
var currentImageIndex = imageList.IndexOf(pictureBox.Image);
if(currentImageIndex < imageList.Count())
    pictureBox.Image = imageList[++currentImageIndex];

//btn back event
var currentImageIndex = imageList.IndexOf(pictureBox.Image);
if(currentImageIndex  > 0)
    pictureBox.Image = imageList[--currentImageIndex];
GetImage je glavna metoda, konkretno meni sluzi za prenos varijable counter, koja na click eventu next ili previous slike, povecava, odnosno smanjuje vrednost countera, on to onda prenosi u GetImage(counter) i tu listam sa dir.GetFiles()[counter].ToString();.

Probacu sa ImageList, nisam nikad to koristio, ali pokusacu.
Verujem da je pametnije, jer ovako zapetljavam program, samim tim ga i usporavam...
DocNet je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Vista NEkompatibilni programi (lična iskustva) oluja Operativni sistemi 179 30.11.2011 16:37
Program slican kao photoinstrument Sallee Grafički softver i radovi 2 13.11.2011 11:59
Program da SE k700 koristim kao daljinac od TV-a Željko Programi za mobilne telefone 12 3.6.2011 21:12
Program kao MSN, samo bolji/brži? Milolos Aplikativni softver 3 18.1.2009 21:35
Program autotestovi za vozacki ispit rgdrajko Programiranje 27 30.9.2007 14:13


Sva vremena su po Griniču +2 h. Sada je 1:08.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com