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”中選擇相應圖標。(對應的添加圖片 “磁盤圖標”和“文件夾圖標”)
效果圖如下:
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.生成解決方案(不清楚的可以參考前一期的內容)
最終運行圖如下:
這次是我添加圖標的時候沒添加對,運行起來不美觀。
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版寫出來的,版本太低可能無法打開,具體下載地址參考第一期的內容。
歡迎各位小夥伴在下方留言,提出自己的疑問或者建議,整理不易,對多點贊閱讀呀,勤加練習才能提高。下期見。