欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# WinForm實(shí)現(xiàn)圖片瀏覽器

 更新時(shí)間:2020年08月24日 09:03:54   作者:片刻清夏  
這篇文章主要為大家詳細(xì)介紹了C# WinForm實(shí)現(xiàn)圖片瀏覽器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

我們首先來(lái)介紹一下這個(gè)原始圖的構(gòu)成:

左邊上面是一個(gè) TextBox 和 一個(gè) Button,分別用來(lái)顯示當(dāng)前路徑以及返回上一個(gè)路徑。左邊下面是一個(gè)瀏覽文件的文件路徑樹狀圖(TreeView),用來(lái)顯示當(dāng)前路徑下的文件和文件夾。右邊是一個(gè)pictureBox,用來(lái)展示選中的圖片。

接下來(lái)我們一步一步實(shí)現(xiàn)這個(gè)圖片查看器!

首先大家應(yīng)該看到了左邊的TreeView上面已經(jīng)有顯示當(dāng)前PC的所有路徑信息,那么是怎么做到的呢?
方法很簡(jiǎn)單,就是先監(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é)點(diǎn)的值
     tn.Tag = "Root";
   treeView1.Nodes.Add(tn); //把結(jié)點(diǎn)加入到TreeView中
   }
 }
}

接下來(lái)我們?cè)O(shè)置每個(gè) Node 的點(diǎn)擊事件,也就是監(jiān)聽 AfterSelect 事件:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
  {
   TreeNode tn = e.Node; //得到發(fā)生選擇事件的結(jié)點(diǎn)
   path = tn.FullPath; //得到完整的路徑 path是一個(gè)定義的全局變量
   textBox1.Text = path; //在左上角的文本框顯示完整的路徑
   if (tn.Tag.ToString() == "File") //如果當(dāng)前結(jié)點(diǎn)是文件
   {
    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é)點(diǎn)是文件夾
   {
    getSubContents(tn);//得到當(dāng)前結(jié)點(diǎn)的全部?jī)?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é)點(diǎn)添加到父節(jié)點(diǎn)
   }
   foreach (FileInfo f in di.GetFiles())
   {
    tn = new TreeNode(f.Name); //該路徑下的所有 文件
    tn.Tag = "File";
    parent.Nodes.Add(tn);
   }
   treeNode = parent;// 全局變量 記錄當(dāng)前結(jié)點(diǎn)
  }

接下來(lái)我們運(yùn)行一下看看效果(pictureBox的大小模式設(shè)置成Zoom)

你們有沒有成功呢?

接下來(lái)就是實(shí)現(xiàn)那個(gè) 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é)點(diǎn)

     treeNode.Nodes.Clear();      //移除當(dāng)前結(jié)點(diǎn)下的所有子節(jié)點(diǎn)
     treeView1.SelectedNode = treeNode.Parent; //設(shè)置他的父節(jié)點(diǎn)為當(dāng)前選中結(jié)點(diǎn)
    }
   }
  }

這樣這個(gè)小項(xiàng)目就算完成了,是不是很輕松?

相關(guān)文章

  • C#如何讓winform程序中的輸入文本框保留上次的輸入

    C#如何讓winform程序中的輸入文本框保留上次的輸入

    這篇文章主要介紹了C#如何讓winform程序中的輸入文本框保留上次的輸入問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C# WinForm程序設(shè)計(jì)簡(jiǎn)單計(jì)算器

    C# WinForm程序設(shè)計(jì)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C# WinForm程序設(shè)計(jì)簡(jiǎn)單計(jì)算器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • c#項(xiàng)目實(shí)現(xiàn)發(fā)布到服務(wù)器全過(guò)程

    c#項(xiàng)目實(shí)現(xiàn)發(fā)布到服務(wù)器全過(guò)程

    這篇文章主要介紹了c#項(xiàng)目實(shí)現(xiàn)發(fā)布到服務(wù)器全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 實(shí)例分享C#中Explicit和Implicit用法

    實(shí)例分享C#中Explicit和Implicit用法

    本篇文章主要給讀者們分享了C#中Explicit和Implicit的用法,對(duì)此有需求和興趣的朋友們一起學(xué)習(xí)下吧。
    2017-12-12
  • C#集合之自定義集合類

    C#集合之自定義集合類

    這篇文章介紹了C#集合之自定義集合類,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 解析abstract與override究竟可不可以同時(shí)使用

    解析abstract與override究竟可不可以同時(shí)使用

    本篇文章是對(duì)abstract與override究竟可不可以同時(shí)使用進(jìn)行了詳細(xì)分析介紹,需要的朋友參考下
    2013-05-05
  • C#實(shí)現(xiàn)Excel表數(shù)據(jù)導(dǎo)入Sql Server數(shù)據(jù)庫(kù)中的方法

    C#實(shí)現(xiàn)Excel表數(shù)據(jù)導(dǎo)入Sql Server數(shù)據(jù)庫(kù)中的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)Excel表數(shù)據(jù)導(dǎo)入Sql Server數(shù)據(jù)庫(kù)中的方法,結(jié)合實(shí)例形式詳細(xì)分析了C#讀取Excel表數(shù)據(jù)及導(dǎo)入Sql Server數(shù)據(jù)庫(kù)的具體操作步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C#客戶端程序Visual Studio遠(yuǎn)程調(diào)試的方法詳解

    C#客戶端程序Visual Studio遠(yuǎn)程調(diào)試的方法詳解

    這篇文章主要給大家介紹了關(guān)于C#客戶端程序Visual Studio遠(yuǎn)程調(diào)試的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 帶你一文了解C#中的Expression

    帶你一文了解C#中的Expression

    c#中有Expression,即表達(dá)式,通過(guò)Expression可以動(dòng)態(tài)構(gòu)造代碼,并編譯執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于C#中Expression的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C#深度優(yōu)先搜索算法

    C#深度優(yōu)先搜索算法

    這篇文章主要介紹了C#深度優(yōu)先搜索算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論