C# WinForm實現(xiàn)圖片瀏覽器
C#WinForm程序設(shè)計之圖片瀏覽器,這次我們一起做一個圖片查看器,這個圖片查看器的原始圖如下:

我們首先來介紹一下這個原始圖的構(gòu)成:
左邊上面是一個 TextBox 和 一個 Button,分別用來顯示當(dāng)前路徑以及返回上一個路徑。左邊下面是一個瀏覽文件的文件路徑樹狀圖(TreeView),用來顯示當(dāng)前路徑下的文件和文件夾。右邊是一個pictureBox,用來展示選中的圖片。
接下來我們一步一步實現(xiàn)這個圖片查看器!
首先大家應(yīng)該看到了左邊的TreeView上面已經(jīng)有顯示當(dāng)前PC的所有路徑信息,那么是怎么做到的呢?
方法很簡單,就是先監(jiān)聽窗口的 Load 事件,代碼如下:
private void Form1_Load(object sender, EventArgs e)
{
createDrivers();//調(diào)用下面的函數(shù)
}
private void createDrivers()
{
DirectoryInfo di;
TreeNode tn;
string s;
foreach (string ss in Environment.GetLogicalDrives())
{
/**
* ss的值形式如下:
* C:\
* D:\
* E:\
* F:\
* I:\
*/
di = new DirectoryInfo(ss); //生成路徑
if (di.Exists) //如果當(dāng)前路徑存在
{
s = ss.Substring(0, ss.IndexOf("\\")); //去掉路徑的 \ 得到如:C:
tn = new TreeNode(ss); //設(shè)置結(jié)點的值
tn.Tag = "Root";
treeView1.Nodes.Add(tn); //把結(jié)點加入到TreeView中
}
}
}
接下來我們設(shè)置每個 Node 的點擊事件,也就是監(jiān)聽 AfterSelect 事件:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode tn = e.Node; //得到發(fā)生選擇事件的結(jié)點
path = tn.FullPath; //得到完整的路徑 path是一個定義的全局變量
textBox1.Text = path; //在左上角的文本框顯示完整的路徑
if (tn.Tag.ToString() == "File") //如果當(dāng)前結(jié)點是文件
{
string ext = path.Substring(path.LastIndexOf(".") + 1); //得到文件的后綴
ext = ext.ToLower();
if (ext == "ico" || ext == "gif" || ext == "jpg" || ext == "png" || ext == "bmp") //如果是圖片,設(shè)置到右邊的pictureBox
pictureBox1.Image = Image.FromFile(path);
else //否則使用系統(tǒng)默認(rèn)的工具打開該文件
System.Diagnostics.Process.Start(path);
}
else //反之當(dāng)前結(jié)點是文件夾
{
getSubContents(tn);//得到當(dāng)前結(jié)點的全部內(nèi)容
}
}
private void getSubContents(TreeNode parent)
{
DirectoryInfo di;
TreeNode tn;
di = new DirectoryInfo(parent.FullPath + "\\"); //得到路徑
if (!di.Exists) return; //路徑不存在,直接返回
foreach (DirectoryInfo d in di.GetDirectories()) //該路徑下面的所有 文件夾
{
tn = new TreeNode(d.Name);
tn.Tag = "Directory";
parent.Nodes.Add(tn); //將該節(jié)點添加到父節(jié)點
}
foreach (FileInfo f in di.GetFiles())
{
tn = new TreeNode(f.Name); //該路徑下的所有 文件
tn.Tag = "File";
parent.Nodes.Add(tn);
}
treeNode = parent;// 全局變量 記錄當(dāng)前結(jié)點
}
接下來我們運行一下看看效果(pictureBox的大小模式設(shè)置成Zoom)

你們有沒有成功呢?
接下來就是實現(xiàn)那個 Back 按鈕的回退功能了!
private void button1_Click(object sender, EventArgs e)
{
DirectoryInfo di = new DirectoryInfo(path + "\\");
int p = path.LastIndexOf("\\");
if (p >= 0)
{
path = path.Substring(0, p);
textBox1.Text = path;
if (treeNode != null) { //全局變量 當(dāng)前選中的結(jié)點
treeNode.Nodes.Clear(); //移除當(dāng)前結(jié)點下的所有子節(jié)點
treeView1.SelectedNode = treeNode.Parent; //設(shè)置他的父節(jié)點為當(dāng)前選中結(jié)點
}
}
}
這樣這個小項目就算完成了,是不是很輕松?
相關(guān)文章
c# EPPlus秘籍之Excel實現(xiàn)圖表導(dǎo)出
這篇文章主要為大家介紹了c# EPPlus秘籍之Excel實現(xiàn)圖表導(dǎo)出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
C#多線程學(xué)習(xí)之(五)使用定時器進行多線程的自動管理
這篇文章主要介紹了C#多線程學(xué)習(xí)之使用定時器進行多線程的自動管理,實例分析了C#使用timer定時器類實現(xiàn)針對多線程的自動管理功能,非常具有實用價值,需要的朋友可以參考下2015-04-04
C# SaveFileDialog與OpenFileDialog用法案例詳解
這篇文章主要介紹了C# SaveFileDialog與OpenFileDialog用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

