我有一个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)
{
}
}
}
答案 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();
}