2014-02-13 3 views
4

У меня есть форма окна C# для импорта и отображения нескольких изображений.Импорт и отображение изображений один за другим

Я могу импортировать несколько изображений и отображать первое изображение, но у вас возникли проблемы с отображением изображений по одному.

Поток программы: нажмите кнопку мыши, затем выберите несколько изображений. После этого первое изображение должно отображаться в окне изображения. Когда пользователь нажимает кнопку «следующего изображения», должно отображаться следующее изображение.

Первое изображение может отображаться на картинке, но не имеет представления об отображении их по одному. Есть ли какая-либо конфигурация для достижения этой цели или ее реализации посредством кодирования. Спасибо всем.

Мое кодирование:

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
     InitializeOpenFileDialog(); 
    } 

    private void InitializeOpenFileDialog() 
    { 
     // Set the file dialog to filter for graphics files. 
     this.openFileDialog1.Filter = 
      "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" + 
      "All files (*.*)|*.*"; 

     // Allow the user to select multiple images. 
     this.openFileDialog1.Multiselect = true; 
     this.openFileDialog1.Title = "My Image Browser"; 
    } 

    private void SelectFileButton_Click(object sender, EventArgs e) 
    { 
     DialogResult dr = this.openFileDialog1.ShowDialog(); 
     if (dr == System.Windows.Forms.DialogResult.OK) 
     { 
      // Read the files 
      foreach (String file in openFileDialog1.FileNames) 
      { 
       // Create a PictureBox. 
        PictureBox pb = new PictureBox(); 
        Image loadedImage = Image.FromFile(file); 
        pb.Height = loadedImage.Height; 
        pb.Width = loadedImage.Width; 
        pb.Image = loadedImage; 
        flowLayoutPanel1.Controls.Add(pb); 
      } 

     } 
    } 
} 
+0

Вы сможете увидеть, в чем проблема, добавив попытку уловить внутри SelectFileB utton_Click обработчик событий, см. http://msdn.microsoft.com/en-us/library/0yd65esw.aspx –

ответ

3

ИМХО, есть лучший путь для достижения этого.

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

Код:

Добавить PictureBox в форму (назовем ее pictureBox1), где вы хотите, чтобы изображения показано на рисунке.

Кроме того, добавьте эти свойства в класс:

private List<Image> loadedImages = new List<Image>(); 
private int currentImageIndex; 

В вашем «загрузке изображение» кнопка мыши событии:

private void SelectFileButton_Click(object sender, EventArgs e) 
{ 
    DialogResult dr = this.openFileDialog1.ShowDialog(); 
    if (dr == System.Windows.Forms.DialogResult.OK) 
    { 
     loadedImages.Clear(); 

     // Read the files 
     foreach (String file in openFileDialog1.FileNames) 
     { 
      // Create a PictureBox. 
      loadedImages.Add(Image.FromFile(file)); 
     } 

     if (loadedImages.Count > 0) 
     { 
      currentImageIndex = 0; 
      pictureBox1.Image= loadedImages[currentImageIndex]; 
     } 
    } 
} 

И, наконец, для следующей/предыдущей кнопки мыши события, которое вы можете добавьте этот код:

// Mod function to support negative values (for the back button). 
int mod(int a, int b) 
{ 
    return (a % b + b) % b; 
} 

// Show the next picture in the PictureBox. 
private void button_next_Click(object sender, EventArgs e) 
{ 
    currentImageIndex = mod(currentImageIndex + 1, loadedImages.Count); 
    pictureBox1.Image = loadedImages[currentImageIndex]; 
} 

// Show the previous picture in the PictureBox. 
private void button_prev_Click(object sender, EventArgs e) 
{ 
    currentImageIndex = mod(currentImageIndex - 1, loadedImages.Count); 
    pictureBox1.Image = loadedImages[currentImageIndex]; 
} 
+0

Программа работает отлично, спасибо. – Alvin

Смежные вопросы