第十章 WinForm高级编程.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

广州市小学信息技术教学同步资源 第一册 第二章 第六节 《 Window窗口》 广州市荔湾区西华路小学 董绮珊.
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
第13章多项目设计与开发.
有序列表.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
Hadoop I/O By ShiChaojie.
第13章 WinForms基础知识.
第9章 Windows窗体应用程序设计 9.1 窗体设计 9.2 常用的控件设计 9.3 多个窗体之间的数据传递 9.4 多文档窗体
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
大学计算机基础 典型案例之一 构建FPT服务器.
走进编程 程序的顺序结构(二).
辅导课程六.
项目四 Windows应用程序窗口设计 任务列表: 1、在图片查看器上添加菜单和工具栏 2、多文档窗体的设计 3、对话框的应用
网络常用常用命令 课件制作人:谢希仁.
第十二章 Win32環境程式設計 這一章節可以說是本書精華之一,Win32程式設計算是比較複雜的部分,但是我們以最簡單的敘述帶領著大家進入Win32程式設計的殿堂,讓你寫出來的程式具有一定的水準以上。若能將本章與下一章的技巧靈活運用,更能讓大家寫出高階的視窗程式。
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第八章 WinForms控件.
Visual C# 2005程序设计 第1章 Visual C#概述 第2章 C#语法基础 第3章 顺序结构程序设计
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第5章 Windows应用程序开发 Windows 窗体是用于 Microsoft Windows 应用程序开发基于.NET 框架的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,得以开发丰富的 Windows 应用程序。另外,Windows 窗体可作为多层分布式解决方案中的本地用户界面。
科研信息管理工具 Endnote X4 王辉.
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第十一讲 学生成绩管理系统(二) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第10章 高级用户界面设计 10.1 菜单设计 10.2 通用对话框 10.3 图像列表框控件 10.4 树形视图控件
Windows 7 的系统设置.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
菜单、状态栏和工具栏 菜单 状态栏 工具栏 编写代码 创建用户界面 Debug and Deploy 使用 Visual
程序设计工具实习 Software Program Tool
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第四讲 客户问卷调查程序 教育部“十二五”职业教育国家规划教材
ASP New and other UIs: Medical Videos Searchasaurus
标准配色方案 背景 文本和线条 阴影 强调色 主色一 主色二 主色三 主色四 推荐应用顺序. 标准配色方案 背景 文本和线条 阴影 强调色 主色一 主色二 主色三 主色四 推荐应用顺序.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
Lab17 程序设计B班
项目二:HTML语言基础.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
GDP设计协同 项目创建者操作手册 GDP项目组 2019/01/30.
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
VRP教程 2011.
Delphi 7.0开发示例.
Python 环境搭建 基于Anaconda和VSCode.
MDI介面建置 建國科技大學 資管系 饒瑞佶.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
YOUR SUBTITLE GOES HERE
VB与Access数据库的连接.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
第四章 UNIX文件系统.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
Presentation transcript:

第十章 WinForm高级编程

目标 了解 MDI 应用程序和 SDI 应用程序 了解菜单和掌握菜单控件的使用 掌握 ImageList 控件 掌握 ToolBar 控件和 StatusBar 控件 掌握Timer 控件 掌握 TreeView 控件 掌握 ListView 控件 了解用于打印的各种类 了解WinForms 中的打印过程

如已有一个文本文件打开,在同一记事本应用程序中,不允许创建第二个文本文件 单文档和多文档 2-1 这是 Ann 的一个测试 如已有一个文本文件打开,在同一记事本应用程序中,不允许创建第二个文本文件 新建一个记事本实例来打开第二个文本文件 在SDI应用程序中一次只能打开一个文件

单文档和多文档 2-2 应用程序窗口 在 MDI 应用程序中可以同时打开多个文件 文档窗口

主窗体和子窗体 3-1 父窗体 子窗体 子窗体的菜单并入父窗体中

主窗体和子窗体 3-2 主窗体的特点: 启动一个 MDI 应用程序时,首先显示父窗体 它是应用程序中所有其他窗口的容器 在任何指定的时间都可以打开多个子窗体 任何 MDI 子窗体都不能移出 MDI 框架区域 关闭 MDI 父窗体则自动关闭所有打开的 MDI 子窗体

主窗体和子窗体 3-3 MDI 应用程序的属性、方法和事件 说明 MdiChildren 用于获取表示多文档界面 (MDI) 子窗体的窗体数组 MdiParent 用于获取或设置当前多文档界面 (MDI) 父窗体 ActiveMdiChild 用于获取当前活动的多文档界面 (MDI) 子窗体 方法 ActivateMdiChild 用于激活子窗体 LayoutMdi 排列 MDI 父窗体中的多文档界面 (MDI) 子窗体 事件 说明 Closed 由用户或窗体的 Close 方法关闭窗体后,发生该事件 Closing 正在关闭窗体时,发生该事件 MdiChildActivate 在 MDI 应用程序中激活或关闭多文档界面 (MDI) 子窗体时,触发该事件 如果窗体为 MDI 父窗体,则在触发 MDI 父窗体的 Closing 事件之前,将触发所有 MDI 子窗体的 Closing 事件。另外,在触发 MDI 父窗体的 Closed 事件之前,将触发所有 MDI 子窗体的 Closed 事件

创建 MDI 窗体 创建 MDI 窗体步骤: 将 IsMdiContainer 属性设置为 True 选择“项目”“添加 Windows 窗体” Closing 事件的调用顺序: 添加给定的代码,将 TestForm 设置为子窗体 TestForm objChild = new TestForm(); objChild.MdiParent = this; objChild.Show(); MDI 子窗体 MDI 父窗体

激活和去激活窗口 显示活动窗口 激活窗口 活动窗口 this.ActivateMdiChild(frmChild); 显示活动窗口的名称 MessageBox.Show(Convert.ToString(this.ActiveMdiChild));

排列子窗口 MDILayout 枚举的成员 成员名称 说明 ArrangeIcons 在 MDI 父窗体的客户端区内排列所有 MDI 子窗体的图标 Cascade 在 MDI 父窗体的客户端区内层叠所有 MDI 子窗口 TileHorizontal 在 MDI 父窗体的客户端区内水平平铺所有 MDI 子窗口 TileVertical 在 MDI 父窗体的客户端区内垂直平铺所有 MDI 子窗口

菜单和菜单组件 菜单是程序中显示一个选项列表的图形元素 菜单提供了将命令分组的一致方法 用户易于访问 一个菜单可以带有若干子菜单 支持使用访问键启用键盘快捷方式

菜单类型 3-1 MainMenu的属性和方法 上下文菜单 在设计阶段将 MainMenu 组件添加到窗体上 说明 IsParent 指定菜单是否包含菜单项,如果此属性的值为 True,指定菜单上则有菜单项 MdiListItem 表示菜单项,它列出 MDI 窗体的子窗体 MenuItems 检索属于指定菜单的菜单项集合 方法 GetContextMenu 检索包含指定菜单的上下文菜单的名称,默认值为 null 引用 GetMainMenu 检索包含指定菜单的主菜单的名称,如果此菜单不在 菜单内,则该属性返回 null 引用 MergeMenu 将指定菜单的菜单项合并到当前活动的菜单中 GetForm 检索包含指定菜单控件的窗体的名称 上下文菜单 在设计阶段将 MainMenu 组件添加到窗体上 Menu 类位于 System.Windows.Forms 命名空间 MainMenu 控件包含多个 MenuItem 控件

菜单类型 3-2 MenuItem 的属性、方法和事件 属性 说明 Checked 是否在指定菜单项的文本旁边显示复选标记,如果此属性设置为 True,则会在指定的菜单项旁边显示复选标记,默认值为 False Index 指定菜单项在当前活动菜单中的索引值,此索引为赋给给每个菜单项的正整数,它从 0 开始 Mnemonic 获取一个指示与此菜单项关联的助记符的值,如果在菜单项的文本中没有指定助记符,则此属性返回字符 ‘0’ Parent 指定此菜单项所在菜单的名称 Text 菜单项显示的文本信息 方法 说明 PerformClick 触发菜单项的 Click 事件,而不需要用户实际上单击此菜单项 事件 Click 按下为菜单项指定的快捷键或访问键,或者用鼠标单击菜单项时,将触发该事件

菜单类型 3-3 MainMenu mnuMainMenu1 = new MainMenu(); this.Menu = mnuMainMenu1; mnuMainMenu1.MenuItems.Add ("文件") 标准前缀 创建一个菜单项,并将它添加到主菜单上 创建 MenuItem 的实例 MenuItem mnuFileOpen; mnuFileOpen = new MenuItem("打开"); this.mnuMainMenu1.MenuItems.Add(mnuFileOpen);

菜单类型 3-4 上下文菜单 ContextMenu 的属性、方法和事件 快捷菜单:单击鼠标右键时显示的快捷菜单;菜单会因用户右键单击位置的不同而不同 属性 说明 SourceControl 用于获取正在显示快捷菜单的控件 方法 Show 在指定位置显示快捷菜单 Events Description Popup 在显示可快捷菜单前触发该事件 在运行时创建上下文菜单: ContextMenu mnuContextMenu1 = new ContextMenu(); this.ContextMenu = mnuContextMenu1;

在运行时添加/移除菜单项 2-1 添加菜单项 MainMenu mnuMainMenu1 = new MainMenu(); MenuItem mnuAddItem = new MenuItem(); MenuItem mnuRemoveItem = new MenuItem(); mnuAddItem.Text = “添加(&A)"; mnuRemoveItem.Text = “移除(&R)"; mnuMainMenu1.MenuItems.Add(mnuAddItem); mnuMainMenu1.MenuItems.Add(mnuRemoveItem); this.Menu = mnuMainMenu1; DialogResult preference = new DialogResult(); preference = MessageBox.Show(“是否要添加新菜单项?”,“添加", MessageBoxButtons.YesNo); 添加键盘快捷方式助记符 添加菜单项

在运行时添加/移除菜单项 2-2 if(Convert.ToString(preference) == “是") { mnuMainMenu1.MenuItems.Add(“新菜单"); DialogResult preference1 = new DialogResult(); preference1 = MessageBox.Show(“是否要移除新菜单项?”, “移除",MessageBoxButtons.YesNo); if(Convert.ToString(preference1) == “是") mnuMainMenu1.MenuItems.RemoveAt(2); } 添加菜单项 移除第三个位置上的菜单项

该属性表示图像的大小,默认高度和宽度为 16 x 16,最大大小为 256 x 256 ImageList 控件 位于 Systems.Windows.Forms 命名空间内 在 ImageList 控件中添加图像的代码 ImageList 控件的属性和方法 imgImageList1.Images.Add (Image.FromFile("picture.gif")); this.picMyPicture.Image = this.imgImageList1.Images[0]; 属性 说明 Images 该属性表示图像列表中包含的图像的集合 ImageSize 该属性表示图像的大小,默认高度和宽度为 16 x 16,最大大小为 256 x 256 方法 Draw 该方法用于绘制指定图像 Image 类的 FromFile() 方法用于手动将图像文件添加到 ImageList 控件中

ToolBarButton 类的属性和事件 两个类 属性 说明 ImageIndex 为工具栏按钮指定的图像在图像列表中的索引值 Parent 指定工具栏按钮所属的 ToolBar 控件 Style 工具栏按钮的样式,其中包括 DropDownButton(下拉按钮)、Separator(分隔符) 和 ToggleButton(切换按钮) ToolTipText 表示工具栏按钮的工具提示文本 属性 说明 Buttons 工具栏按钮控件的集合 ShowToolTips 鼠标移到各工具栏按钮上时,是否显示相应的工具提示,如果该属性的值设置为 True,则显示工具提示 事件 ButtonClick 单击工具栏按钮时,将触发该事件 ToolBar ToolBarButton

工具栏 – 示例 创建名为 Example 1 的 Windows 应用程序。 添加了三个按钮 输出屏幕 创建名为 Example 1 的 Windows 应用程序。 将 Form1.cs 更改为 frmToolBarExample.cs。 将 ToolBar 控件拖动到窗体上,并将它命名为 tbrToolBar。 选择 Buttons 属性,并单击按钮以显示“ToolBarButton 集合编辑器”窗口。 添加三个按钮。 处理 ButtonClick 事件的代码 private void tbrToolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { if(e.Button == this.tbrToolBar.Buttons[0]) MessageBox.Show(“已单击 “打开”按钮"); }

用于获取或设置与状态栏面板关联的工具提示文本 StatusBar 控件 StatusBarPanel 类的属性 属性 说明 Panels 表示 StatusBar 控件的所有面板 ShowPanels 用于指定是否显示状态栏的面板 两个类 在状态栏 的第二个面板上显示当前日期的代码 StatusBar StatusBarPanel ……… sbrStatusBar1.Panels[1].Text=Convert.ToString(DateTime.Today); ………. StatusBar 类的属性 属性 说明 Text 用于获取或设置状态栏面板的文本 ToolTipText 用于获取或设置与状态栏面板关联的工具提示文本

演示:创建 Windows 应用程序示例的步骤 应用程序示例 4-1 由菜单、工具栏和状态栏组成的应用程序 创建名为 BookManagement的 Windows 应用程序。 将名称 Form1.cs 更改为 frmMdiApplication.cs。 将 Menu、StatusBar 、ToolBar和 ImageList 控件拖动到窗体上。 演示:创建 Windows 应用程序示例的步骤

应用程序示例 4-2 设置窗体上控件的属性 控件 属性 Form Name: frmMdiApplication Text: 图书管理系统 Menu: mnuBookManage IsMdiContainer: True MenuItem Name:mnuEnginerrBook Text:工程类图书 Menu Name: mnuBookManage Name:mnuForeignBook Text:外文类图书 Name: mnuEnterStore Text: 新书入库(&N) Name:mnuChineseBook Text:中文类图书 Name: mnuSearchBook Text: 查询书目(&S) ToolBar Name: tbrBookBar Name: mnuConManage Text: 菜单管理(&M) StatusBar Name: sbrBookStatus MenuItemName: mnuExitText: 退出系统(&E)

应用程序示例 4-3 选择 ToolBar 控件,单击 ToolBar 控件的 Buttons 属性,此时会出现“ToolBarButton 集合编辑器”窗口,向其中添加3个按钮,并分别命名为 trbNewBooks 、trbBookSearch和trbExit。分别在Text属性处输入入库、查询和退出 单击“确定”以继续

应用程序示例 4-4 在 mnuEnginerrBook菜单项的 Click 事件中添加代码 将以下代码添加到 mnuConManage “菜单管理”的 Click 事件中 将以下代码添加到 frmMdiForm 的 Load 事件中 选择 StatusBar 控件,并将 ShowPanels 属性设置为 True 选择 Panels 属性,并添加两个面板,命名为 sbrTimeBar 和sbrNameBar private void mnuConManage_Click(object sender, System.EventArgs e) { ContextMenu mnuContextMenu = new ContextMenu(); this.ContextMenu = mnuContextMenu; mnuContextMenu.MenuItems.Add("新书入库"); mnuContextMenu.MenuItems.Add("查询书目"); mnuContextMenu.MenuItems.Add("退出系统"); } private void frmMdiForm_Load(object sender, System.EventArgs e) { this.sbrBookStatus.Panels[0].Text = DateTime.Now.ToShortDateString(); } private void mnuEnginerrBook_Click(object sender, System.EventArgs e) { frmNewBooks newBooks=new frmNewBooks(); newBooks.MdiParent=this; newBooks.WindowState=FormWindowState.Maximized; newBooks.Show(); this.sbrBookStatus.Panels[1].Text=this.ActiveMdiChild. Text.ToString(); } 单击“确定”以继续 创建新窗体,命名为frmNewBooks.cs,当鼠标单击“工程类图书”菜单选项时弹出此窗体

应用程序示例 4-5 将以下代码添加到 mnuExit 菜单项的 Click 事件中 将以下代码添加到 tbrBookBar工具栏按钮的 ButtonClick 事件中 private void tbrBookBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { if(e.Button == this.tbrBookBar.Buttons[0]) this.mnuEnginerrBook_Click(sender,e); } else if(e.Button == this.tbrBookBar.Buttons[1]) MessageBox.Show("书籍查询系统正在建设中……"); else if(e.Button==this.tbrBookBar.Buttons[2]) this.mnuExit_Click(sender,e); private void mnuExit_Click(object sender, System.EventArgs e) { this.Close(); }

Timer 控件简介 3-1 WinForms的Timer控件 03:15:04 在应用程序中显示实际时间 按指定的时间长度显示图像 需要一种可在程序运行时操控时间的机制

Timer 控件简介 3-2 拖放

Timer 控件简介 3-3 对特定的时刻响应 Timer 类包含在 System.Windows.Forms 命名空间中 按照某个周期触发事件 与用户无关,可以通过编程,在规定的时刻执行相应动作 组件与其他控件不同,它不向用户提供用户界面,因此没有必要显示在 WinForms 设计器的界面上

Timer 控件为开发人员提供了一种在经过指定的时间间隔或到达指定的绝对时间时根据代码进行响应的方式

例如:tmrTicker, tmrTickTimer 属性 Enabled Interval 方法 Start() Stop() 事件 Tick Timer 控件名的前缀是 "tmr“ 例如:tmrTicker, tmrTickTimer

要求显示计算机运行的时间长度和应用程序运行的时间长度 Timer 控件应用程序示例 4-1 要求显示计算机运行的时间长度和应用程序运行的时间长度

frmTickCounter 窗体的 Load 事件 Timer 控件应用程序示例 4-2 public class frmTickCounter : System.Windows.Forms.Form { private int compuTime; ………………….. 为窗体声明一个私有整型变量 private void frmTickCounter_Load(object sender, System.EventArgs e) { compuTime = Environment.TickCount; } frmTickCounter 窗体的 Load 事件

Timer 控件应用程序示例 4-3 private void tmrTickTimer_Tick(object sender, System.EventArgs e) { long curTickValue = Environment.TickCount; long difference = curTickValue - compuTime; long computerHours, computerMinutes, computerSeconds; long applicationHours, applicationMinutes, applicationSeconds; //将毫秒转换成小时、分钟和秒 computerHours = (curTickValue / (3600 * 999)) % 24; computerMinutes = (curTickValue / (60 * 999)) % 60; computerSeconds = (curTickValue / 999) % 60; applicationHours = (difference / (3600 * 999)) % 24; applicationMinutes = (difference / (60 * 999)) % 60; applicationSeconds = (difference / 999) % 60; 应用程序中使用的局部变量 将毫秒转换成小时、分钟和秒

Timer 控件应用程序示例 4-4 显示每个标签的输出结果 this.lblComputer.Text = String.Format(“这台计算机已经开机 {0} 小 时, {1} 分钟 {2} 秒",computerHours.ToString(),computerMinutes. ToString(),computerSeconds.ToString()); this.lblApplication.Text = String.Format(“这个程序已经运行了 {0} 小 时, {1} 分钟 {2} 秒", applicationHours.ToString(), applicationMinutes.ToString(),applicationSeconds.ToString()); } private void btnClose_Click(object sender,System.EventArgs e) { this.Close(); } 关闭应用程序

ListView 控件 2-1 选择列出项目的视图类型 可折叠的 TreeView ListView

ListView 控件 2-2 创建与 Windows 资源管理器的右窗口相似的用户界面 可用于以特定样式或视图类型显示列表项 四种视图模式,即大图标、小图标、列表和详细资料

ListView 控件的属性和方法 方法 属性 ListView 控件名的前缀是 “lvw“ 如:lvwList, lvwListItems MultiSelect SelectedItems Sorting TopItem View Clear() GetItemAt() Sort() ListView 控件名的前缀是 “lvw“ 如:lvwList, lvwListItems

Column 集合和 Column 对象 ListView 控件的 Columns 属性表示控件中出现的所有列标题的集合 ColumnHeader 对象定义在控件的 View 属性设置为“Details”值时,作为 ListView 控件的一部分显示的那些列 如果 ListView 控件没有没有任何列标题,并且 View 属性设置为 Details,则 ListView 控件不显示任何项

添加列标题 添加多个列应该 如何做? 方法一: ColumnHeader objHeader=new ColumnHeader(); objHeader.Text="姓名"; objHeader.TextAlign=HorizontalAlignment.Center ; objHeader.Width=100; lvPerson.Columns.Add(objHeader); 方法二: lvPerson.Columns.Add ( "姓名" , 60 , HorizontalAlignment.Right ) ; 添加多个列应该 如何做?

项集合和项对象 ListView 控件的 Items 属性表示包含控件中所有项的集合 该属性返回 ListView.ListViewItemCollection,可以用于 ListView 中添加新项、删除项或计算可用项数

将定义好的数值添加到ListView里面 添加记录 实例化一个ListViewItem 设置各列的数值 ListViewItem lstItem = new ListViewItem ( ) ; lstItem.SubItems.Clear ( ) ; lstItem.SubItems[0].Text = reader["name"].ToString ( ) ; //第0列 lstItem.SubItems.Add ( reader["HomePhone"].ToString ( ) ) ; //第1列 。。。。。 lstItem.SubItems.Add ( reader["Email"].ToString ( ) ) ; //第n列 lvPerson.Items.Add(lstItem) 将定义好的数值添加到ListView里面 添加多行数据怎么办?

TreeView 控件 2-1

TreeView 控件 2-2 用于以节点形式显示文本或数据,这些节点按层次结构顺序排列 Windows 资源管理器中左窗格所包含的目录和文件是以树型视图样式排列的

节点集和节点对象 TreeView 控件的 Nodes 属性表示为 TreeView 控件指定的树节点集 树节点集中的每个树节点对象可包括它本身的树节点集 树节点集中 Add()、Remove() 和 RemoveAt() 方法使开发人员可添加和移动集中的单个树节点

添加、修改和删除节点 3-1 TreeView 控件以层次结构方式显示节点

添加、修改和删除节点 3-2 在窗体上选择已存在的 TreeView 控件或在窗体上添加一个新控件 要使用树节点编辑器删除节点,请重复步骤 1 和 2。调用树节点编辑器,然后选择要删除的节点,单击“删除” 在“属性”窗口中单击节点属性旁的省略号 (…) 按钮,调用树节点编辑器 添加到树的第一个节点是根节点, 其他节点可添加到存在根节点的树上 通过选择根节点或任何其他节点, 然后单击“添加子级”按钮,可为树添加子节点

添加、修改和删除节点 3-3 可通过编程方式向 TreeView 添加节点 ………… TreeNode chNode = new TreeNode("Text for new node"); tvwTree1.currNode.Nodes.Add (chNode); 可通过编程方式从 TreeView 删除节点 …………. tvwTree1.Nodes.Remove(tvwTree1.currNode); // 清除所有节点 tvwTree1.Nodes.Clear(); …………… 如果没有选定要删除的节点,则会删除根节点

TreeView 控件的事件 事件 TreeView 控件名的前缀是 "tvw" 如:tvwTree, tvwList AfterCheck AfterCollapse AfterExpand AfterSelect BeforeCheck BeforeCollapse BeforeExpand BeforeSelect TreeView 控件名的前缀是 "tvw" 如:tvwTree, tvwList

程序实例——需求 对TreeView的控制 显示节点的属性 列出文件夹的TreeView

将该盘符添加到TreeView并调用AddDirectories() 添加盘符 private void FilltvwDirectory() { string[] drives = Environment.GetLogicalDrives(); //获取当前设备盘符,并添加到数组drivers[]l里面 for (int i = 0; i < drives.Length; i++) TreeNode cRoot = new TreeNode(drives[i]); //这里可以写成 //TreeNode cRoot=new TreeNode(); //cRoot.Text=drivers[i]; tvwDirectory.Nodes.Add(cRoot); AddDirectories(cRoot); //添加该盘符下的文件夹 } 获取盘符并添加到数组里面 将该盘符添加到TreeView并调用AddDirectories() 方法添加盘符下的文件夹

添加下一级文件夹 利用GetPathFromNode()方法获取当前节点的 路径并找到他的下级文件夹,之后添加到 DirectoryInfo数组内 private void AddDirectories(TreeNode node) { try DirectoryInfo dir = new DirectoryInfo(GetPathFromNode(node)); DirectoryInfo[] e = dir.GetDirectories(); for (int i = 0; i < e.Length; i++) string name = e[i].Name; if (!name.Equals(".") && !name.Equals("..")) //判断是否是上级目录 node.Nodes.Add(new TreeNode(name)); } catch (Exception e) { MessageBox.Show(e.Message); 若文件夹不是返回上级目录标志则添加到TreeView里面

用户点击“+”展开下一级目录时调用此事件添加下级目录 展开节点 用户点击“+”展开下一级目录时调用此事件添加下级目录 private void tvwDirectory_BeforeExpand(object source, TreeViewCancelEventArgs e) { TreeNode nodeExpanding = (TreeNode)e.Node; AddSubDirectories(nodeExpanding); } //调用AddDirectories将该节点的字节点添加到树图中该节点下 private void AddSubDirectories(TreeNode node) for (int i = 0; i < node.Nodes.Count; i++) AddDirectories(node.Nodes[i]);

在此事件中首先对树图排序之后调用Refresh方法 排序节点 当用户点击排序复选框时触发此事件 在此事件中首先对树图排序之后调用Refresh方法 重新添加到树图上 private void chkOrder_Click(object source, EventArgs e) { this.tvwDirectory.Sorted = chkOrder.Checked; //树图排序 for (int i = 0; i < tvwDirectory.Nodes.Count; i++) Refresh(tvwDirectory.Nodes[i]); //调用刷新树图方法,重新添加节点 }

将当前展开的节点添加到TreeView并展开它的子节点 private void Refresh(TreeNode node) { if (node.Nodes.Count > 0) if (node.IsExpanded) string[] tooBigExpandedNodes = new string[node.GetNodeCount(true)]; int iExpandedNodes = Refresh_GetExpanded(node, tooBigExpandedNodes,0); string[] expandedNodes = new string[iExpandedNodes]; Array.Copy(tooBigExpandedNodes, 0, expandedNodes, 0, iExpandedNodes); node.Nodes.Clear(); AddDirectories(node); AddSubDirectories((TreeNode)node); node.Expand(); for (int j = 0; j < node.Nodes.Count ; j++) if (node.Nodes[j].Nodes.Count > 0) {Refresh_Expand(node.Nodes[j], expandedNodes); } } else node.Nodes.Clear();AddDirectories(node); 获取已经展开的节点,并把它存放在数组中 将当前展开的节点添加到TreeView并展开它的子节点

递归利用Refresh_GetExpanded()方法添加子节点到数组中 获取展开节点 private int Refresh_GetExpanded(TreeNode Node, string[] ExpandedNodes, int StartIndex) { if (StartIndex < ExpandedNodes.Length) if (Node.IsExpanded) ExpandedNodes[StartIndex] = Node.Text; StartIndex++; for (int i = 0; i < Node.Nodes.Count; i++) StartIndex = Refresh_GetExpanded(Node.Nodes[i], ExpandedNodes,StartIndex); } return StartIndex; return -1; 若当前节点是展开的,则添加到数组中 递归利用Refresh_GetExpanded()方法添加子节点到数组中

展开原来已经展开的节点 若数组中下标为i的节点就是当前节点,则添加当前 节点的子节点,并把当前节点设为展开,同时展开 当前节点的子节点 private void Refresh_Expand(TreeNode Node, string[] ExpandedNodes) { for (int i = ExpandedNodes.Length - 1; i >= 0; i--) if (ExpandedNodes[i] == Node.Text) AddSubDirectories((TreeNode) Node); Node.Expand(); for (int j = 0; j < Node.Nodes.Count; j++) Refresh_Expand(Node.Nodes[j], ExpandedNodes); } return; 若数组中下标为i的节点就是当前节点,则添加当前 节点的子节点,并把当前节点设为展开,同时展开 当前节点的子节点

总结 3-1 单文档界面的某一时刻只能打开一个文档,多文档界面允许同时打开多个文档 MDI应用程序由一个MDI父窗体和一个或多个子窗体构成 菜单是程序中显示一个选项列表的图型元素,它提供将命令分组的方法和用户对其访问的简单途径 上下文菜单用于使用户通过单击鼠标右键访问常用的命令

总结 3-2 Timer 控件为开发人员提供了一种在指定时刻或指定的周期执行任务的控件 ImageList 控件是一种图形存储控件,可以包含单个图像或图像集合 工具栏包含工具栏按钮,这些按钮提供对应用程序中最常用的菜单命令的快速访问 状态栏通常显示在窗体的底部,向用户提供有关应用程序状态的信息 Timer 控件为开发人员提供了一种在指定时刻或指定的周期执行任务的控件

总结 3-3 Timer 控件的 Interval 属性表示时钟的周期,单位为毫秒 ListView 控件用于以特定样式或视图类型显示列表项,其Items集合对象提供了对其列表项的操作 TreeView 控件用于以节点形式显示文本或数据,这些节点按层次结构顺序排列 TreeView控件的Nodes集合对象提供了对树型节点的操作