Bardzo prosta przeglądarka do JPG-ów...

0

Witam, napisałem takie cuś:

     private Bitmap MyImage;
        int NumberOfImages = 0;
        int ImageNo = 0;

        public void ShowMyImage(String fileToDisplay, int xSize, int ySize)
        {
            // Sets up an image object to be displayed.
            if (MyImage != null)
            {
                MyImage.Dispose();
            }

            // Stretches the image to fit the pictureBox.
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            MyImage = new Bitmap(fileToDisplay);
           //  pictureBox1.ClientSize = new Size(xSize, ySize);
            pictureBox1.Image = (Image) MyImage;
        }



        private void button1_Click(object sender, EventArgs e)
        {
            DirectoryInfo directory = new DirectoryInfo(@"D:/FOTO");
            FileInfo[] jpegFiles = directory.GetFiles("*.jpg");
            NumberOfImages = jpegFiles.Length;

            if (ImageNo > 0)
            {
                ImageNo--;
            }
            else ImageNo = NumberOfImages-1;

            ShowMyImage(directory.ToString() + "/" + jpegFiles[ImageNo].Name, 100, 100);
        
        }


        private void button3_Click(object sender, EventArgs e)
        {

            DirectoryInfo directory = new DirectoryInfo(@"D:/FOTO");
            FileInfo[] jpegFiles = directory.GetFiles("*.jpg");
            NumberOfImages = jpegFiles.Length;

        }

        private void button2_Click(object sender, System.EventArgs e)
        {

            DirectoryInfo directory = new DirectoryInfo(@"D:/FOTO");
            FileInfo[] jpegFiles = directory.GetFiles("*.jpg");
            NumberOfImages = jpegFiles.Length;

            if (ImageNo < NumberOfImages-1)
            {
                ImageNo++;
            }
            else ImageNo = 0;

            ShowMyImage(directory.ToString() + "/" + jpegFiles[ImageNo].Name, 100, 100);
        }
    }

Wiem, że kłaniają się podstawy języka, ale zapytam:

Co zrobić żeby nie powtarzać kodu:

     DirectoryInfo directory = new DirectoryInfo(@"D:/FOTO");
            FileInfo[] jpegFiles = directory.GetFiles("*.jpg");
            NumberOfImages = jpegFiles.Length;

Tylko, żeby wystąpił raz.

Dzieki. Pozdr. Der

0

Napisz sobie do tego taką małą klasę albo stwórz dodatkową funkcję która zrealizuję te trzy linijki..

1

Mógłbyś jak zrobiłeś - wstawić to do jakiejś zmiennej globalnej - tylko że to jest brzydkie i nie zabezpiecza przed ingerencją użyszkodnika w katalog (są od tego watchery, ale nie przesadzajmy ;) )

Możesz też jak napisał @up - z klasą chyba przesada w tym wypadku, ale może taka funkcja? :

private void NumberOpImages(string path)
{
    DirectoryInfo directory = new DirectoryInfo(path);
    FileInfo[] jpegFiles = directory.GetFiles("*.jpg");
    return jpegFiles.Length;
}

albo od razu połączyć z kolejnym warunkiem (tylko że nie wiem czy to jest opłacalne, bo warunki w if-ach masz różne... sam zadecyduj)

private bool FileCtLesserThan(string path, int num) // sam to musisz sensownie nazwać ;)
{
    DirectoryInfo directory = new DirectoryInfo(@"D:/FOTO");
    FileInfo[] jpegFiles = directory.GetFiles("*.jpg");
    return jpegFiles.Length < num;
}

i używać

if (ImgCtLesserThan(@"D:/FOTO", ImageNo)
{  }

Wiem, że kłaniają się podstawy języka, ale zapytam:

Nieprawda, nareszcie od dawna jakieś ciekawe pytanie na forum!

0

Chyba nie rozumiem czemu używacie DirectoryInfo...

Nie prościej tak?

private void CountImages(string path)
{
    return Directory.GetFiles(path, "*.jpg").Length;
}
0

@msm

Ehhhh tylko popsułeś kod ;) Mój nie jest zgodny z wzorcami projektowania, ale jest bardziej przejrzysty i zrozumiał :)

Nie znam się, więc może teraz napiszę bzdurę, ale wydaje mi się, że tylko obsłużyłeś sprawę liczby zdjęć, a co z dostępnością listy plików (nazw plików) ?? Chyba będzie poza zakresem (scope) używalności/dostępności (tak to się mówi fachowo?) ?

0

Tak w ogóle, to to:

directory.ToString() + "/" + jpegFiles[ImageNo].Name

To nie jest czasem to samo, co to?

jpegFiles[ImageNo].FullName
0

jpegFiles[ImageNo].FullName

Chyba tak. Sprawdzę...

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