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版写出来的,版本太低可能无法打开,具体下载地址参考第一期的内容。
欢迎各位小伙伴在下方留言,提出自己的疑问或者建议,整理不易,对多点赞阅读呀,勤加练习才能提高。下期见。