PictureBox显示图像

时间:2018-08-07 15:08:56

标签: c# winforms

我有一个datagridview,其中包含来自各个文件夹和子文件夹中的图像搜索结果。我的问题是我想要一个图片框来显示那些图像文件。当我双击图像在根路径上的行时,将显示该图像。没关系。但是,当我双击该根路径内子文件夹中图像所在的行时,该行未显示。有人可以帮助我吗?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace _myfiles
{
    public partial class FormFotos1 : Form
    {
        public FormFotos1()
        {
            InitializeComponent();
        }
        private void FormFotos_Load(object sender, EventArgs e)
        {
            // se pretendermos pesquisar em várias pastas
            List<string> diretorios = new List<string>()
            {@"\\server01\folder1\folder2\folder3"};

            // se pretendermos pesquisar as várias extensões
            List<string> extensoes = new List<string>()
            {".jpg",".bmp",".png",".tiff",".gif"};

            DataTable table = new DataTable();
            table.Columns.Add("Nome do ficheiro");
            table.Columns.Add("->Duplo clique-<");

            foreach (string diretorio in diretorios)
            {
                var ficheiros = Directory.EnumerateFiles(diretorio, "*", SearchOption.AllDirectories).
                    Where(r => extensoes.Contains(Path.GetExtension(r.ToLower())));

                foreach (var ficheiro in ficheiros)
                    table.Rows.Add(Path.GetFileName(ficheiro));
            }
            dataGridView1.DataSource = table;
        }
        private void dataGridView1_DoubleClick(object sender, EventArgs e)
        {
            FormFotos2 myForm = new FormFotos2();
            string imageName = dataGridView1.CurrentRow.Cells[0].Value.ToString();
            Image img;
            img = Image.FromFile(@"\\server01\folder1\folder2\folder3\" + imageName);
            myForm.pictureBox1.Image = img;
            myForm.ShowDialog();
        }
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}

1 个答案:

答案 0 :(得分:0)

在表中添加第三列,您将在其中存储图像的完整文件名。该列将在DataGridView上隐藏,但仍保留在该列中,您可以使用其内容,而不必每次都构建文件路径时使用

private void FormFotos_Load(object sender, EventArgs e)
{
    // se pretendermos pesquisar em várias pastas
    List<string> diretorios = new List<string>()
    {@"\\server01\folder1\folder2\folder3"};

    // se pretendermos pesquisar as várias extensões
    List<string> extensoes = new List<string>()
    {".jpg",".bmp",".png",".tiff",".gif"};

    DataTable table = new DataTable();
    table.Columns.Add("Nome do ficheiro");
    table.Columns.Add("->Duplo clique-<");
    table.Columns.Add("fullpath");
    foreach (string diretorio in diretorios)
    {
        var ficheiros = Directory.EnumerateFiles(diretorio, "*", SearchOption.AllDirectories).
            Where(r => extensoes.Contains(Path.GetExtension(r.ToLower())));

        foreach (var ficheiro in ficheiros)
        {
            DataRow row = table.NewRow();
            row[0] = Path.GetFileName(ficheiro);
            row[2] = ficheiro;
            table.Rows.Add(row);
        }
    }
    dataGridView1.DataSource = table;
    dataGridView1.Columns[2].Visible = false;
}

private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
    FormFotos2 myForm = new FormFotos2();
    string imageName = dataGridView1.CurrentRow.Cells[2].Value.ToString();
    Image img;
    img = Image.FromFile(imageName);
    myForm.pictureBox1.Image = img;
    myForm.ShowDialog();
}