C # Прокручивание списка изображений и отображение одного изображения в картинке - PullRequest
0 голосов
/ 22 мая 2018

У меня проблема с циклическим перемещением по списку изображений при нажатии следующей кнопки и отображении выбранного изображения в картинке.В моем коде я хочу, чтобы пользователь щелкнул btnNext и проверил, меньше ли значение изображения в графическом окне, чем значение в списке изображений.

Если это так, выберите следующее изображение в списке (содержащем список изображений) и отобразите его в окне для картинок.Я не уверен, как все это сделать, хотя.Вот кодПросто чтобы быть ясно, ошибка во 2-м, если утверждение btnNext_Click.Ошибка говорит «Оператор> не может быть применен к операндам типа int и Image» GUI во время выполнения

string _big_fileName;
int _counter = 0;

public Form1()
    {            
        InitializeComponent();
    }

    //Displays larger instance of selected image in picture box.
    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //FOR i is less than the first image.
        for (int i = 0; i < listView1.SelectedItems.Count;i++)
        {                
            //GET filename from listview and store in index.
            _big_fileName = listView1.SelectedItems[i].Text;
            //Create larger instance of image.
            pictureBox1.Image = Image.FromFile(_big_fileName);
            //Fill panel to the width and height of picture box.
            panel1.AutoScrollMinSize = new Size(pictureBox1.Image.Width, 
                                                pictureBox1.Image.Height);
        }
    }

private void mnuOpen_Click(object sender, EventArgs e)
    {
        loadImageList();
    }

private void btnNext_Click(object sender, EventArgs e)
    {
        if(pictureBox1.Image != null)
        {
            //IF Image is less than Image list size.
            if (pictureBox1.Image < imageList1.Images.Count)
            {
                //ACCESS Imagelist size against image value
                _big_fileName = listView1.SelectedItems[_counter].Text;
                //INCREMENT Image list current position.
                _counter++;
                //ASSIGN current position to image.
                pictureBox1.Image = Image.FromFile(_big_fileName);
                //DISPLAY and enlarge image.
                panel1.AutoScrollMinSize = new Size(pictureBox1.Image.Width,
                                                pictureBox1.Image.Height);
            }
        }

        else
        {
            MessageBox.Show("No image.");
        }
    }

private void loadImageList()
    {
        imageList1.Images.Clear();
        listView1.Clear();

        oFD1.InitialDirectory = "C:\\";
        oFD1.Title = "Open an Image File";
        oFD1.Filter = "JPEGS|*.jpg|GIFS|*.gif|PNGS|*.png|BMPS|*.bmp";

        //Open Dialog Box.
        var oldResults = oFD1.ShowDialog();

        if (oldResults == DialogResult.Cancel)
        {
            return;
        }

        try
        {
            //GET amount of filenames.
            int num_of_files = oFD1.FileNames.Length;
            //Store filenames in string array.
            string[] arryFilePaths = new string[num_of_files];


            //FOREACH filename in the file.
            foreach (string single_file in oFD1.FileNames)
            {
                //ACCESS array using _counter to find file.
                arryFilePaths[_counter] = single_file;
                //CREATE image in memory and add image to image list.
                imageList1.Images.Add(Image.FromFile(single_file));

                _counter++;
            }
            //BIND image list to listview.
            listView1.LargeImageList = imageList1;


            for (int i = 0; i < _counter; i++)
            {
                //DISPLAY filename and image from image index param. 
                listView1.Items.Add(arryFilePaths[i], i);
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show("Error " + ex.Message);
        }
    }

1 Ответ

0 голосов
/ 22 мая 2018

Изменить: Ответ в основном изменен в зависимости от вашего комментарияВам нужно будет создать новую переменную-член для хранения текущего индекса изображения и убедиться, что она используется для доступа к ImageList

Создать переменную-член для хранения текущего индекса изображения:

int _imageIndex;

Добавьте эту строку в вашу функцию mnuOpen_Click после вызова loadImageList();

_imageIndex = 0;

В функции btnNext_Click внесите изменения:

if (pictureBox1.Image < imageList1.Images.Count)

в

if (_imageIndex < imageList1.Images.Count)

и

_big_fileName = listView1.SelectedItems[_counter].Text;

до

_big_fileName = listView1.SelectedItems[_imageIndex].Text;

и добавьте строку

_imageIndex++;

Переработка btnNext_Click обработчика событий

    private void btnNext_Click(object sender, EventArgs e)
    {
        //IF Image is less than Image list size.
        if (_imageIndex < imageList1.Images.Count)
        {
            listView1.Items[_imageIndex].Selected = true;

            _imageIndex++;
        }
    }
...