winform做一个页面,左边是文件夹的所有图片缩略图,右边是一个图片显示器,请写出具体代码
时间: 2024-09-10 11:03:52 浏览: 45
c# 选择多个pdf打开在winform,dpf转图片 demo
在 WinForm 中创建一个显示文件夹图片缩略图和图片预览页面,我们可以使用 `System.Drawing` 和 `System.IO` 库来处理图像,以及 `Windows Forms` 的控件如 `PictureBox` 和 `TreeView`。以下是一个基本的示例代码:
首先,添加一个 TreeView 控件显示文件夹结构,一个 PictureBox 控制器来显示大图预览:
```xml
<Windows>
<Form Name="MainForm">
<Panel Dock="Fill">
<TreeView Name="TreeViewFiles" />
<PictureBox Name="PictureBoxPreview" Width="400" Height="400" />
</Panel>
</Form>
</Windows>
```
然后编写 C# 代码:
```csharp
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.IO.Compression;
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
InitializeTreeView();
}
private void InitializeTreeView()
{
// 用真实的文件夹路径替换这里
string folderPath = @"C:\YourFolderPath\Images";
TreeNode root = new TreeNode(folderPath);
TreeViewFiles.Nodes.Add(root);
// 加载文件夹下的所有图片
LoadDirectoryStructure(root, folderPath);
}
private void LoadDirectoryStructure(TreeNode node, string directoryPath)
{
try
{
DirectoryInfo dirInfo = new DirectoryInfo(directoryPath);
FileInfo[] files = dirInfo.GetFiles("*.jpg;*.png;*.gif", SearchOption.AllDirectories);
foreach (FileInfo file in files)
{
TreeNode childNode = new TreeNode(file.Name);
childNode.Tag = file.FullName;
// 图片缩略图加载
using (Image img = Image.FromFile(file.FullName))
{
Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(file.FullName);
childNode.ImageKey = icon.ToBitmap().ToArgb();
childNode.SelectedImageKey = icon.ToBitmap().ToArgb();
}
node.Nodes.Add(childNode);
}
// 对每个子目录递归操作
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach (DirectoryInfo subdir in dirs)
{
LoadDirectoryStructure(node, subdir.FullName);
}
}
catch (Exception ex)
{
Console.WriteLine($"Error loading directory: {ex.Message}");
}
}
private void TreeViewFiles_AfterSelect(object sender, TreeViewEventArgs e)
{
// 预览图片
string filePath = ((TreeNode)e.Node).Tag as string;
PreviewImage(filePath);
}
private void PreviewImage(string imagePath)
{
try
{
pictureBoxPreview.Image = Image.FromFile(imagePath);
}
catch (FileNotFoundException)
{
pictureBoxPreview.Image = null;
MessageBox.Show($"无法找到文件: {imagePath}");
}
}
}
```
上述代码首先初始化树视图,并在选择文件夹中的图片时加载预览。注意你需要把 `@"C:\YourFolderPath\Images"` 替换为你要显示图片的实际文件夹路径。
**相关问题--**:
1. 如何优化大图片的加载速度?
2. 是否能添加图片右键菜单以便删除、保存等操作?
3. 如何处理非图片文件或者错误情况?
阅读全文