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版写出来的,版本太低可能无法打开,具体下载地址参考第一期的内容。

欢迎各位小伙伴在下方留言,提出自己的疑问或者建议,整理不易,对多点赞阅读呀,勤加练习才能提高。下期见。

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思维矩阵K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值