第5章:路由事件
第5章:路由事件本章目标
理解路由事件
掌握键盘输入事件
掌握鼠标输入事件
掌握多点触控输入事件
理解路由事件 每个.NET 开发人员都熟悉“事件”的思想——-当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息。WPF 通过事件路由(event routing)的概念增强了.NET 事件模型。事件路由允许源自某个元素的事件由另一个元素引发。例如,使用事件路由,来自工具栏技钮的单击事件可在被代码处理之前上传到工具栏,然后上传到包含工具栏的窗口。
事件路由为在最合适的位置编写紧凑的、组织良好的用于处理事件的代码提供了灵活性。要使用 WPF 内容模型,事件路由也是必需的,内容模型允许使用许多不同的元素构建简单元素(如按钮),并且这些元素都拥有自己独立的事件集合。
定义、注册和封装路由事件 WPF 事件模型和WPF属性模型非常类似。与依赖项属性一样,路由事件由只读的静态字段表示,在静态构造函数中注册,并通过标准的.NET 事件定义进行封装。
12345678910111213141516171819202122232425262728293031323334 ...
第4章:依赖项属性
第4章:依赖项属性本章目标
理解依赖项属性
理解属性验证
依赖项属性 属性与事件是.NET抽象模型的核心部分。WPF使用了更高级的依赖项属性(Dependency Property)功能来替换原来.NET的属性,实现了更高效率的保存机制,还添加了附加功能,如属性变更通知以及强制回调、属性值继承(在逻辑树中向下传播默认属性值的能力)以及属性有效性验证等。同时,依赖项属性也是WPF许多重要功能的基础,包括动画、数据绑定以及样式。
使用依赖项属性包括三个部分,定义依赖项属性;注册依赖项属性以及添加属性包装器。
定义依赖项属性 定义依赖项属性,使用三个修饰词,public、static、readonly。数据类型为DependecyProperty,而每一个依赖项属性都会有一个去掉“Property”的CLR属性和他对应,而我们在xaml中访问的都是CLR属性。
根据约定,定义依赖项属性的字段的名称是在普通属性的末尾处加上单词”Property”。根据这种命名方式,可以从实际属性的名称中区分出依赖项属性的定义。字段的定义使用了 readoly 关键字,这意味着只能在 Fra ...
第八章:Windows课程总复习
第八章:Windows课程总复习本章目标
复习本门课程,要求学员写学习总结
实现航班管理系统
本章内容本门课程总结:
学员写本门课程的总结,写出总结文档,具体要求如下:
分组总结
内容要求正确、全面、重点突出
表达要求清晰流畅、有条理
整体思路:
构建窗体
窗体的属性和事件
Application 类:Exit()方法
窗体的显示:模式化显示、非模式化显示
窗体的隐藏和关闭:Hide()、Close()方法
MDI应用程序:父窗体、子窗体
提示信息的消息框
MessageBox
窗体间的数据传递,通过添加公有字段实现
窗体控件
Label、TextBox、ComboBox、NumericUpDown、DateTimePickerButton、RadioButtonGroupBox、PanelMenuStrip、ContextMenuStrip、ToolStripPictureBox、ImageList、TimerListView、DataGridView、TreeViewMDI
排列控件
Visual Studio 的格式菜单
Anchor和Dock属性
...
第七章:TreeView控件
第七章:TreeView控件本章目标
使用TreeView制作静态菜单
使用TreeView动态加载菜单功能
本章内容TreeView控件(树形菜单)
常见的树形菜单
TreeView树形菜单的主要属性
属性
说明
ImageIndex
节点默认图片索引
ImageList
存放节点图像的ImageList控件
Nodes
所有节点(节点的集合)
PathSeparator
路径字符串分隔符
ShowLines
是否显示连接线
编辑树的节点Nodes
TreeView控件(动态菜单)
TreeNode节点对象
创建TreeNode节点对象
12345678910//创建根节点TreeNode treeNode = new TreeNode();treeNode.Text = "全部";//节点显示文本treeNode.SelectedImageIndex = 0;//选中节点显示的图片索引 treeNode.ImageIndex = 1;//默认图片显示索引//创建对象,指定默认图片索引和选中节点后图片索引TreeN ...
第六章:DataGridView控件及数据绑定
第六章:DataGridView控件及数据绑定本章目标
使用DataSet存放数据
使用ComboBox进行数据绑定
使用DataGridView进行数据绑定
使用DataSet实现数据更新
本章内容DataSet数据集(课程回顾)
ADO.NET两大组成部分
通过DataSet数据集获取数据库数据 ,代码如下:
1234567891011121314DataSet ds = new DataSet();//创建数据集string connString = "server=.;database=MySchool;uid=sa;pwd=sa;";using (SqlConnection conn = new SqlConnection(connString)){ string sql = "select gradeId,gradeName from Grade"; SqlDataAdapter sda = new SqlDataAdapter(sql, conn); sda.Fill(ds,"Grade& ...
SQL Server视频
SQL Server视频
初识SQL Server
常用的关系型数据库
数据库的下载及安装
数据库管理操作
数据库约束
第五章:实现Windows程序的数据更新
第五章:实现Windows程序的数据更新本章目标
使用ADO.NET操作数据
使用PictureBox控件显示图片
使用Timer控件实现定时操作
本章内容修改信息
问题:在上一章内容是讲到通过ListView将查询出来的信息展示出来,那么要修改选中的数据怎么实现呢?
具体分析:
添加快捷菜单,实现右键修改操作
获得选中学生的学号,将学员传入到编辑学生信息窗体
弹出编辑学生用户窗体
显示学生信息
保存修改后的信息
具体实现步骤:
在上一章内容中完成如上图所示功能
完成编辑页面的布局
在编辑窗体中设置一个属性,来保存学生学号
12345678public partial class FrmEditStudent : Form{ public int StudentNo;//定义要修改学生的学号 public FrmEditStudent() { InitializeComponent(); }}
右键修改操作,获取要修改的学生学号
1234567891011121314private v ...
第3章:布局
第3章:布局本章目标
理解布局的原则
理解布局的过程
理解布局的容器
掌握各类布局容器的运用
理解 WPF 中的布局WPF 布局原则 WPF 窗口只能包含单个元素。为在WPF 窗口中放置多个元素并创建更贴近实用的用户男面,需要在窗口上放置一个容器,然后在这个容器中添加其他元素。造成这一限制的原因是 Window 类继承自 ContentControl 类,在后续章节中将进一步分析ContentControl类。
布局过程 WPF 布局包括两个阶段:测量(measure)阶段和排列(arange)阶段。在测量阶段,容器遍历所有子元素,并询问子元素它们所期望的尺寸。在排列阶段,容器在合适的位置放置子元素。
当然,元素未必总能得到最合适的尺寸—有时容器没有足够大的空间以适应所含的元素。在这种情况下,容器为了适应可视化区域的尺寸,就必须剪裁不能满足要求的元素。在后面可以看到,通常可通过设置最小窗口尺寸来避免这种情况。
注意:
布局容器不能提供任何滚动支持.相反,滚动是由特定的内容控件ScrollViewer—一提供的,ScrollViewer 控件几乎可用于任何地方。
布局容器 ...
第四章:通用类DBHelper和异常处理
第四章:通用类DBHelper和异常处理本章目标
掌握异常处理try-catch-finally
会编写通用类DBHelper
本章内容为什么要使用异常处理?
如下图所示:当在程序运行过程中出现以下几种情况:
无法打开数据库
数据操作出错
出现一些意外错误
………..
出现异常,导致结果:程序异常终止,如何在异常中让程序恢复运行呢?所以要使用到异常处理机制。
什么是异常处理
什么是异常?
程序在运行时发生的错误,叫异常。
什么是异常处理?
在编写代码时,预知可能发生的异常,在程序中编码处理。
在 C# 语言中异常与异常处理语句包括三种形式,即 try catch、try finally、try catch finally。
在上述三种异常处理的形式中所用到关键字其含义如下:
try:用于检查发生的异常,并帮助发送任何可能的异常。
catch:以控制权更大的方式处理错误,可以有多个 catch 子句。
finally:无论是否引发了异常,finally 的代码块都将被执行。
如何处理异常
使用 try-catch 块捕获和处理异常
在 try 语句中 ...
第三章:数据集DataSet对象
第三章:数据集DataSet对象本章目标
熟练掌握DataSet对象基本概念
熟练掌握DataAdapter 对象的基本使用
会使用DataSet数据集对象处理数据
本章内容为什么要使用DataSet对象问题1:在前两章中学习到DataReader对象可以查询数据,但是不能在查询出来的数据进行修改操作,因为DataReader对象是只读,那么如果要将查询出来的数据进行修改操作呢?怎么办?
问题2:我们知道使用DataReader和Command对象时必须保持数据库的连接(加大服务器负担),连接断开后就无法使用了?
综上二个问题,DataSet就是最好的解决方案,可以解决以上二个问题,所以DataSet是一个很强大的组件,它的特点是可以在断开连接的情况下查询和修改大量的数据,这是很有意义的。因为一个联网的软件系统将会存在大量的客户端需要连接服务器端的数据库,如果都需要保持连接,服务器的负载将会很大,这样就会影响软件系统的响应速度(比如QQ)。如果客户端获得数据后断开连接,这样服务器的负载就会小得多。DataSet就是在这种目的下被设计出来的。
什么是DataSet 概念:DataS ...









