c# Windows窗體應用程序設計(四)

c# Windows窗體應用程序設計(四)

上次介紹的簡單應用其中第二個窗體運行結果如下:
上次
我相信肯定有比我做得更好的小夥伴,關於上次第二個窗體設計有疑問的可以在下方留言,歡迎討論。


今天來介紹兩個簡單應用,樹視圖和Timer控件

樹視圖

樹視圖窗體的設計分 “四步走” (這個方法可以參考上一期第一節“c#窗體設計的一般步驟”)

1.新建項目

新建一個名爲“樹視圖”的窗體,Text改爲“樹視圖”,Size設爲“400,500”。Size大小可以根據自己的佈局喜好更改。

2.插入控件,完善功能與佈局

1.添加一個TreeView控件,將Size屬性改爲“390,470”,並將Anchor屬性改爲“Top, Bottom, Left, Right”(可直接輸入)
2.添加一個ImageList控件,爲其添加“我的電腦”,“磁盤驅動器”,“文件夾”,“打開的文件夾”四個圖標(如何添加圖片,請參考上一期“列表視圖部分的添加方法”)
以下是所用到的三個圖標,需要的自取截圖:
我的電腦
磁盤
文件夾
打開部分
如果覺得上述圖片不好的話,可以自行截取。
3.將TreeView的ImageList屬性置爲imageList1。
4.打開TreeView 屬性Nodes的樹節點編輯器,添加一個根,將標籤(此處更改的是Text屬性,關於name屬性和text屬性的區別,請參考上一期內容。)改爲“我的電腦”,在“ImageKey”和“SelectedImageKey”中選擇相應圖標。(對應的添加圖片 “磁盤圖標”和“文件夾圖標”)

效果圖如下:
效果圖1

3.加入代碼,完善功能

本次需要添加的代碼如下,本次需注意:
1.需在頭部添加“using System.IO;
2.注意大括號的對應關係
向TreeView添加的代碼如下:(添加方法參考上一期內容)

 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Text.ToString() != "我的電腦")
                EnumDirectories(e.Node);
            else
                EnumDrives(e.Node);

直接在後面添加如下代碼:

 void EnumDrives(TreeNode ParentNode)
            {
                if (ParentNode.Nodes.Count == 0)
                {
                    foreach (string drive in Directory.GetLogicalDrives())
                    {
                        treeView1.SelectedNode = ParentNode;
                        TreeNode TempNode = new TreeNode();
                        TempNode.Text = drive.Substring(0, drive.Length - 1);
                        TempNode.Tag = drive;
                        TempNode.ImageIndex = 1;
                        TempNode.SelectedImageIndex = 1;
                        treeView1.SelectedNode.Nodes.Add(TempNode);
                        treeView1.SelectedNode.Nodes[treeView1.SelectedNode.Nodes.Count - 1].EnsureVisible();
                    }
                }
            }
            void EnumDirectories(TreeNode ParentNode)
            {
                treeView1.SelectedNode = ParentNode;
                string DirectoryPath = ParentNode.Tag.ToString();
                if (ParentNode.Nodes.Count == 0)
                {
                    if (DirectoryPath.Substring(DirectoryPath.Length - 1) != @"\")
                        DirectoryPath += @"\";
                    try
                    {
                        foreach (string directory in Directory.GetDirectories(DirectoryPath))
                        {
                            TreeNode TempNode = new TreeNode();
                            TempNode.Text = directory.Substring(directory.LastIndexOf(@"\") + 1);
                            TempNode.Tag = directory;
                            TempNode.ImageIndex = 3;
                            TempNode.SelectedImageIndex = 2;
                            treeView1.SelectedNode.Nodes.Add(TempNode);
                            treeView1.SelectedNode.Nodes[treeView1.SelectedNode.Nodes.Count - 1].EnsureVisible();
                        }
                    }
                    catch (Exception)
                    {

                    }
                }
            }

注意末尾的大括號數量是否與前面的對應。
括號

4.生成解決方案(不清楚的可以參考前一期的內容)

最終運行圖如下:
結果1
這次是我添加圖標的時候沒添加對,運行起來不美觀。


2.Timer控件

本次應用是做一個簡單的計時器。
步驟與上面的一樣,本次需要添加的控件如下:
控件
注(最後需要再添加兩個label控件,更改text爲:,用於分隔前面三個label控件)

本次所需添加的代碼如下:
開始/繼續按鈕:

private void button1_Click(object sender, EventArgs e)
{
    timer1.Enabled = true;
}

停止/清零按鈕:

private void button2_Click(object sender, EventArgs e)
{
    if (timer1.Enabled == true)
        timer1.Enabled = false;
    else
    {
        labelFen.Text = "0";
        labelMiao.Text = "0";
        labelHaomiao.Text = "0";
    }
}

Timer控件:

private void timer1_Tick(object sender, EventArgs e)
{
    int min = Int32.Parse(labelFen.Text);
    int sec = Int32.Parse(labelMiao.Text);
    int fra = Int32.Parse(labelHaomiao.Text);
    fra++;
    //分鐘數
    if (sec == 60)
    {
        min++;
        labelFen.Text = min.ToString();
        labelMiao.Text = "0";
        if (min == 100)
        {
            timer1.Enabled = false;
            MessageBox.Show("計時器已達到上限", "提示");
            return;
        }
    }
    //秒數
    if (fra == 100)
    {
        sec++;
        labelMiao.Text = sec.ToString();
    }
    //秒數小數位
    fra = fra % 100;
    labelHaomiao.Text = fra.ToString();
}

運行圖下次公佈。

ps:綜合應用小遊戲設計正在整理中。

前四期的源代碼獲取方式:
百度網盤鏈接:https://pan.baidu.com/s/1nR6QVtR33bGQJZIAPoadGA
提取碼:eif7
說明:解壓包解壓後,打開文件夾,找到一個以 .sln結尾的後綴文件,用vs2017打開就行。博主所寫的代碼都是vs2017community版寫出來的,版本太低可能無法打開,具體下載地址參考第一期的內容。

歡迎各位小夥伴在下方留言,提出自己的疑問或者建議,整理不易,對多點贊閱讀呀,勤加練習才能提高。下期見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章