C# Winform编程自学笔记(六)

这是C# Winform变成自学笔记第六篇,上接《五》;

内容一览

  1. 底部工具栏 StatusStrip
  2. 控制时间 Timer
  3. 表格 ListView
  4. 目录导览 TreeView

————————正文————————

(一)底部工具栏 StatusStrip

status控件主要出现在当前Windows窗体的底部,一般使用文本和图像向用户显示应用程序当前的状态,该控件位于“菜单和工具栏”区域;
statusa控件允许添加的控件包括:

StatusLabel 标签控件
ProgressBar 进度条控件
DropDownButton 下拉列表控件
SplitButton 分割控件

案例学习:
1)在Form窗体上拖拽一个GroupBox控件,用于建立“文本信息显示区”容器:一个RichTextBox控件,用于编辑文本;一个按钮对象为“统计字数”;一个StatusStrip控件用于在底部显示统计信息,同时为StatusStrip控件增加一个StatusLabel标签,用于显示统计信息。
在这里插入图片描述

2)添加如下代码:

public partial class Form2 : Form
    {
    
    
        public Form2()
        {
    
    
            InitializeComponent();
        }

   private void Form2_Load(object sender, EventArgs e)
        {
    
    
            toolStripStatusLabel1.Text = "现在的日期是:" + DateTime.Now.ToShortDateString() + ":现在的时间是:" + DateTime.Now.ToShortTimeString();
        }

   private void button1_Click(object sender, EventArgs e)
        {
    
    
            toolStripStatusLabel1.Text = "字数信息是:" + richTextBox1.Text.Length;
        }

   private void button2_Click(object sender, EventArgs e)
        {
    
    
            //定义要增加的底部工具栏
            StatusStrip sb = new StatusStrip();
            //定义底部工具栏项目中的控件,StatusLabel是一个类似于Label的标签控件,现在用于显示文字
            ToolStripLabel tsl = new ToolStripLabel();
            //要显示的文字内容
            tsl.Text = "新增的工具条";
            //定义底部工具栏中的项目
            ToolStripItem[] tsi = new ToolStripItem[1];
            tsi[0] = tsl;
            //将项目添加到StatusStrip当中去
            sb.Items.AddRange(tsi);
            //将StatusStrip加入到窗体中
            this.Controls.Add(sb);
        }

   }

实验结果:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

(二)Timer控件

使某一事件按具体时间运行,Timer属于Timer类;
值得注意的是,Timer控件不会在设计中显示出来,浅白地说,它与用户无关,因此不提供用户界面
该控件可以用于控制程序在规定的时刻执行相应动作,或者按照某个周期触发一个具体的事件。

Timer属性及方法:

项目 说明
Enable 时钟是否可用
Interval 时钟每间隔多长时间触发一次tick事件,时间间隔单位是ms
Start 时钟启动
Stop 时钟停止
Tick 每隔Interval时间间隔触发一次

案例学习:
1)从工具箱中拖拽出一个pictureBox图片控件和两个button控件,在Winform窗体上布置完毕以后,再从工具箱中拖拽出一个Timer控件,完成界面的布置工作。
【这个实验动态效果看起来像走马灯】
在这里插入图片描述
2)将Timer控件的Enable属性设置为True;双击“播放按钮”,对其代码编辑如下:

private void button1_Click(object sender, EventArgs e)
        {
    
    
            timer1.Start();
        }

3)双击“停止按钮”,键入如下代码:

private void button2_Click(object sender, EventArgs e)
        {
    
    
            timer1.Stop();
        }

4)双击time1控件对象,在其Tick事件中键入如下代码:

 private void timer1_Tick(object sender, EventArgs e)
        {
    
    
            pictureBox1.Left -= 5;//图片对象每间隔一段时间向左挪5像素
            if(pictureBox1.Right<0)//如果图片右边小于零,则图片从当前窗体左侧消失
            {
    
    
                pictureBox1.Left = Width;//则图片的左侧设置为窗体宽度,并再次从右侧出现
            }
        }

实验结果:
在这里插入图片描述在这里插入图片描述

(三)表格 ListView

ListView是像资源管理器左侧的目录列表一样的控件,一般来说,可以显示四种视图模式,即大图标,小图标,列表和详细资料,另外还可以用特定样式或者视图类型来显示列表项。

Columns:列;

Items:行;

ListView方法及属性:

属性 说明
Itmes ListView中的具体内容
MultiSelect 允许选择多个项
SelectedItems 用户选择的ListView行
Sorting 指定进行排序的方法
Columns 详细视图中显示的列信息
Clear() 彻底清除视图,删除所有的选项和列
GetItemAt() 返回列表视图中位于x,y的选项
Sort() 进行排序,仅限于字母数字类型
BeginUpdate 开始更新,直到调用EmdUpdate为止,当一次插入多个选项时这个方法很有用,因为它会禁止视图闪烁,并可以大大提高速度
EndUpdate 结束更新

在所有属性中,最重要的是Column集合和Column对象。ListView控件的Columns属性表示控件中出现的所有列标题加粗样式的集合,而列标题是ListView控件汇总包含标题文本的一个项。

设置完Column集合相当于完成了表的表头设计工作(列设计),另外一项重要的工作是设置表的每一行信息,ListView控件的设置中与行配置有关的是Items集合和Items项对象。

Items属性返回ListView.LIstViewItemCollection,可以用于在ListView中添加新项、删除项或计算可用项。

实践案例:
1)从工具箱拖拽一个ImageLIst图片列表控件,和一个ListView控件,在图片列表控件中加载若干图片信息;
2)选中ListView控件,配置其LargeImageList和SmallImageLIst的属性分别为ImageList控件对象;
3)选中ListView控件,通过Columns属性或者编辑列,打开Columnheader集合编辑器,在集合编辑器中设置图片列表内容和表头名称;
4)选中ListView控件,设置其View属性为Details,至此,ListView控件的列信息设置完毕;下面开始设置行信息:
5)选中ListView控件的Items属性,开始进行行信息的设置工作,在打开的ListViewItem集合编辑器中,连续添加若干项内容,并分别为每项填入text属性值,需要注意的是,此处信息的填写可以理解为表的每行信息的“键”的概念,该行其他列信息的填写工作需要单击SubItems属性继续配置。
6)单击某行的SubItems属性,进入ListViewSubItems配置界面,该界面主要设置某行除“键”值信息以外其他列的信息。

实验结果:
在这里插入图片描述

(四)目录导览 TreeView

树状导览形式的目录。
在TreeView中,最重要的概念就是节点和节点集;
Nodes——节点集;
节点集中Add(),Remove(),RemoveAt()方法可以使开发人员添加和移动单个树结点;

TreeView控件的操作主要包括加入子节点或兄弟节点、删除节点、展开和折叠节点等。

①加入子节点。
首先,在TreeView组件中确定要加入的子节点的位置,然后创建一个节点对象,利用TreeView类对节点的加入方法,添加子节点的语句为:

treeView1.SelectedNode.Nodes.Add(tmp);

②加入兄弟节点
先找当前选中节点的父节点,然后再该父节点下面建立子节点;

treeView1.SelectedNode.Parent.Nodes.Add(tmp);

③删除节点
首先判断要删除的结点是否存在下一级结点,如果不存在,则调用Remove方法。

treeView1.SelectedNode.Romove();

④展开结点
首先获取当前TreeView控件的根节点,然后利用ExpandAII方法展开结点。

//定位根节点
treeView1.SelectedNode=treeView1.Nodes[0];
//展开组件中所有节点
treeView1.SelectedNode.ExpandAII();

⑤展开选定结点的下一级节点
首先获取当前选中的节点,然后利用Expand方法折叠结点

treeView1.SelectedNode = treeView1.Nodes[0];
treeView1.SelectNode.Collapse();

实际操作:
1)从工具箱拖拽一个textbox控件,一个treeView控件和三个Button控件;
在这里插入图片描述
2)从工具箱的菜单和工具栏中拖拽一个ContentMenuStrip控件,并设置该菜单的三个子菜单名称。该控件主要用于右击TreeView控件时,弹出用户自定义快捷菜单。
在这里插入图片描述
3)具体功能实现代码为:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace UNIT2_2
{
    
    
    public partial class Form5 : Form
    {
    
    
        public Form5()
        {
    
    
            InitializeComponent();
        }

 private void Form5_Load(object sender, EventArgs e)
        {
    
    
            treeView1.Nodes.Clear();
            TreeNode tem = new TreeNode("根节点");
            treeView1.SelectedNode.Nodes.Add(tem);
        }

 private void AddChildNode()
        {
    
    
            if(treeView1.SelectedNode==null)
            {
    
    
                MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
           
 }
            else
            {
    
    
                if(textBox1.Text!=" ")
                {
    
    
                    TreeNode tmp;
                    tmp=new TreeNode(textBox1.Text);
                    treeView1.SelectedNode.Nodes.Add(tmp);
                    treeView1.ExpandAll();
                }
            }
        }
        private void AddParent()
        {
    
    
            try{
    
    
                if(treeView1.SelectedNode==null)
                {
    
    
                    MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
                }
                else{
    
    
                    if(textBox1.Text!=" ")
                    {
    
    
                        TreeNode tmp;
                        tmp = new TreeNode(textBox1.Text);
                        treeView1.SelectedNode.Parent.Nodes.Add(tmp);
                        treeView1.ExpandAll();
                    }
                    else
                    {
    
    
                      MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        return;
                    }
                }
            }
            catch{
    
    
                TreeNode tem = new TreeNode("根节点");
                treeView1.Nodes.Add(tem);
            }
        }
        private void treeView1_MouseDown(object sender,MouseEventArgs e)
        {
    
    
            if(e.Button==MouseButtons.Right)
                contextMenuStrip1.Show(this,new Point (e.X,e.Y));
        }

 private void button1_Click(object sender, EventArgs e)
        {
    
    
            treeView1.SelectedNode.Expand();
        }

private void button2_Click(object sender, EventArgs e)
        {
    
    
            treeView1.SelectedNode = treeView1.Nodes[0];
            treeView1.SelectedNode.ExpandAll();

}

private void button3_Click(object sender, EventArgs e)
        {
    
    
            treeView1.SelectedNode= treeView1.Nodes[0];
            treeView1.SelectedNode.Collapse();
        }

 private void 加入子节点ToolStripMenuItem_Click(object sender, EventArgs e)
        {
    
    
            AddChildNode();
        }

private void 加入兄弟节点ToolStripMenuItem_Click(object sender, EventArgs e)
        {
    
    
            AddParent();
        }

 private void 删除节点ToolStripMenuItem_Click(object sender, EventArgs e)
        {
    
    
            if(treeView1.SelectedNode.Nodes.Count==0)
            {
    
    
                treeView1.SelectedNode.Remove();
            }else
            {
    
    
                MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        } 
    }
}

实验结果:
在这里插入图片描述

零散笔记

1.如何显示当前的时间和日期?

private void Form2_Load(object sender, EventArgs e)
        {
    
    
            toolStripStatusLabel1.Text = "现在的日期是:" + DateTime.Now.ToShortDateString() + ":现在的时间是:" + DateTime.Now.ToShortTimeString();
        }

2.如何统计RichBox文字栏中的字数

 private void button1_Click(object sender, EventArgs e)
        {
    
    
            toolStripStatusLabel1.Text = "字数信息是:" + richTextBox1.Text.Length;
        }

3.属性和事件方法在使用上的区别

可以将属性看做是一个值,一个变量;方法就是附属的函数;
再直白点说,调用方法的时候要在后面加括号,属性不用。

猜你喜欢

转载自blog.csdn.net/Cambridge26/article/details/105384013