第3章窗体与控件任务: 
(1) 优化窗体控件布局。
(2) 调整窗体中控件输入次序。
(3) 窗体控件的特殊设置。
(4) 新建窗体。
(5) 完成练习。
3.1概述3.1.1理解Visual Studio 2010对象Visual Studio 2010是一个面向对象的应用程序开发环境,它包含大量对象,例如窗体、菜单、数据窗口对象、各种控件等。无论什么对象,它们基本上都具有这样三种特性: 属性、对象函数(方法)、事件。个别对象可能只具备其中的一种或两种特性。下面介绍Visual Studio 2010对象属性、函数、事件的基本概念。
1. 属性
属性用来描述对象的特征,描述一个对象不同于另一个对象的地方。Visual Studio 2010的对象也有属性,少至三五个,多达数十个。对可视对象(如窗口、控件、菜单等)来说,查看对象属性的方法很简单: 鼠标右击对象,则屏幕上弹出一个弹出式菜单,选择Properties菜单项以打开属性对话框,这样对象属性就分门别类地呈现在屏幕上,用户可以根据需要尽情设置和修改。
每个对象都有一个对象名,可以在属性对话框中定义,对象的大多数属性在程序代码中可以动态地修改(不允许修改的属性称作只读属性),其格式为: 对象名.属性=属性值。例如,某段程序代码有一行语句为 cb_find.text="继续查找",当执行这一语句后,程序就把按钮cb_find的标题修改为“继续查找”。其中,cb_find是按钮名称,text是按钮对象的标题属性。
2. 对象函数
在大多数面向对象的编程语言中,也将对象函数称作“方法”。对象函数作用于对象,其引用方式形如: 对象名·函数名(参数1, 参数2,…)。当然有的函数可以没有参数,大多数对象函数都有返回值,该值往往用来指示函数的执行情况,现举一个简单的例子,用Hide()函数将名为cb_yes的按钮对象隐藏起来,其调用形式是cb_yes·Hide ( )。
3. 事件
事件是对象的一个重要内在特征,它是指由用户操作或程序执行所引起相关对象的某些事情发生,比如当单击菜单对象时,菜单对象的单击(Clicked)事件就发生了。Visual Studio 2010的大多数对象都有自己的事件,应用有应用的事件,菜单、窗口、控制件也有它们各自的事件,Visual Studio 2010为这些对象都预先定义了一组事件。针对每个发生的事件,如果设计人员希望做相应处理的话,Visual Studio 2010提供了每个事件的响应方法入口,可在属性窗口的事件列表项中双击所选中的事件,即可进入事件响应方法入口,允许用户编写一段代码并存储,作为事件处理程序。当然,并非每个发生的事件都需要编写一段事件处理程序,若不需要,可不编写。
数据库原理与应用实验教程(第3版)第3章窗体与控件3.1.2控件概述
控件是构成Visual Studio 2010应用程序图形界面、完成数据输入/输出的强有力的工具,是应用程序图形界面的重要组成部分。一方面,控件丰富美化了窗口界面;另一方面,控件也为用户操纵应用程序以及应用程序表现数据提供了灵活多样的手段。Visual Studio 2010的控件基本上分成两类: 一类能够响应用户的操作,它们具有事件(如按钮、编辑框等控件);另一类不响应用户的操作,它们没有事件(如文本框、绘图控件)。无论哪一类控件,都不能单独保存,需要开发人员将其放置到窗口上,与窗口融为一体,保存到应用库中,才能发挥其作用。
前面介绍了静态文本框、命令按钮、单行编辑框等控件,接下来说明控件操控及其他常用控件的概念和用途。
控件操控包括放置控件、控件命名、选择窗体中控件、移动控件、删除控件、对齐控件、控件常用属性的设置、控件的焦点与Tab次序的设置等。
将控件放置到窗体上的操作步骤为: ①用窗体画板打开欲放置控件的窗体; ②在Visual Studio 2010窗体图标工具栏上,有一个工具箱图标(图案是锤子与扳手交叉摆列),单击该图标,系统会显示出所有的控件图标,通过单击选择要放置的控件; ③将鼠标指针移动到窗体上要放置所选控件的位置,单击鼠标左键,所选控件即被放置到窗体上。控件放置到窗体上后,系统在状态栏中给出所放控件的名称、位置、大小等信息。
往窗体上放置控件时,系统自动为控件赋予一个唯一的名称,该名称由两部分组成: 第一部分是控件的默认名称前缀,如命令按钮的默认名称前缀是cb_,单行编辑框前缀是sle_;第二部分是数字标号,该数字保证控件名称的唯一性。默认的控件名称不直观,没有反映具体控件的作用,一般情况下都要对控件重新命名。
最初放置到窗体上的控件,位置通常不会恰到好处,控件的大小也是系统默认的尺寸,不一定符合应用程序的要求,因此应通过移动控件位置和改变控件的大小来合理布局窗体。当某个控件不再需要时,可以将其删除。
在窗体上放置了多个控件后,往往需要让控件按某种方式排列整齐,以使应用程序更加美观。
大多数控件都有一个标题,用于向用户提示控件的功用,缺省时,控件的标题由系统自动设置为“None”,开发人员必须予以修改,有些控件我们希望根据程序的运行情况决定用户能否访问它,这时可以通过设置控件的Visible或Enabled属性来实现。
焦点是接收用户鼠标或键盘输入的能力,当控件有焦点时,才能接收用户的输入。在窗体上放置多个控件后,程序运行时哪些控件能获得输入焦点、哪些控件不能获得输入焦点,以及用户按键盘上的Tab键时从一个控件跳到哪一个控件的次序等问题对应用程序来说都是至关重要的。控件或窗口得到焦点的途径有三条: ①运行时用户用鼠标选择对象; ②运行时用户使用访问键选择对象; ③在某事件代码中使用对象函数SetFocus()使对象获得焦点。
将控件放置到窗体上后,Visual Studio 2010自动给每个能够响应用户操作的控件赋予一个TabIndex值为0,1,2,…,该值决定了默认情况下程序运行时用户按Tab键输入焦点的跳转次序,如果默认的跳转次序不能满足应用程序的需要,可重新设置。
编辑屏蔽控件MaskedTextBox是一种“聪明”的单行编辑框,使用户按指定的格式输入数据,例如,输入某人的出生日期时要让用户按“日/月/年”的格式输入,此时,可以使用格式为DD/MM/YY的编辑屏蔽控件。
列表框ListBox在一个矩形框,可以显示多行文本,用列表的方式为用户提供多种选择。
下拉列表框ComboBox又叫作组合框,它把单行编辑框与列表框的功能结合起来,具有这两种控件的特点。
单选钮RadioButton、复选框CheckBox是为用户做出抉择而设计的,单选钮用来表示一组互斥的选项,用户只能从中选择一项。复选框用来表示是/否或真/假两种选择,常常成组使用,同一组中可以有多个复选框被选中。单选钮、复选框的分组通过组框GroupBox来实现,组框与单选钮、复选框常常同时出现。组框有两个用途: 一是装饰界面,二是对单选钮进行分组,这样在一个窗体中就可以有几组单选钮。
标签控件Tab Control是在Visual Studio 2010开发环境中使用最多的控件之一,当设置某个对象的属性时,打开的属性对话框使用的就是标签控件。标签控件能够把多种数据和程序选项封装在一起,使用户通过简单的操作访问这些数据和选项。一般来说,标签控件由多个标签页组成。用户能够看到的总是当前标签页。
数据窗口是Visual Studio 2010提供给开发人员快速开发应用程序的强有力的工具,数据窗口包括两个方面的内容: 数据窗口对象和数据窗口控件。数据窗口对象主要以多种形式表现数据,并允许用户更新数据;数据窗口对象通过数据窗口控件在用户界面上展现数据,即先在窗口上放置数据窗口控件,再将数据窗口对象连接到数据窗口控件上。
特别提示: 对某MaskedTextBox控件设置日期时,为了使设置能适应各操作系统和数据库系统的环境,建议在该控件属性的Mask标签页中做如下设置: 设置Type为Date,设置Masks为[date]International,设置Mask为yyyymmdd。
3.2实验实验一优化窗体控件布局(1) 进入Stucour窗体应用项目后,选择w_student窗体设计(双击项目中的w_student.cs),并完成如图3.1所示的窗口。其中,“出生年月”右边的控件为Toolbox窗口的Common Controls中的MaskedTextBox控件,按钮为Button控件,下方深灰色矩形框为Toolbox窗口的Data中的DataGridView控件(用来显示数据)。
图3.1控件分布界面示意图
(2) 如图3.2所示,单击“学号”的Label控件后,按Ctrl键,并用鼠标逐个单击图中所示的各个Label控件,最后单击Make Vertical Spacing Equal图标。
图3.2垂直居中示意图(3) 如图3.3所示,单击Align Rights图标。
图3.3控件右对齐示意图
(4) 如图3.4所示,单击“学号”右边的TextBox控件后,按Ctrl键,并逐个单击图中所示的各个TextBox控件,最后单击Make Vertical Spacing Equal图标。
图3.4控件多选示意图
(5) 如图3.5所示,单击Align Lefts图标,再单击Make Same Width图标。
图3.5右对齐以及宽度相等示意图
(6) 如图3.6所示,类似于上述操作方法,得到窗体整齐排列的控件。
图3.6窗口调整结果图
实验二调整窗体中控件输入次序
(1) 如图3.7所示,单击第一个输入控件(学号右边的TextBox控件),并在屏幕右下角的Properties窗口中选择TabIndex项,在其对应输入区输入“1”。
图3.7TabIndex 位置示意图
(2) 单击右边的第一个输入控件(“专业”右边的TextBox控件),并在屏幕右下角的Properties窗口中选择TabIndex项,在其对应输入区输入“2”。以此类推,单击“名字”右边的TextBox控件,Properties窗口中选择TabIndex项,在其对应输入区输入“3”,…,单击“电话”右边的TextBox控件,Properties窗口中选择TabIndex项,在其对应输入区输入“11”,如图3.8所示。当该窗体运行时数据输入次序是以TabIndex所标记的值从小到大的次序(即在输入时,按Tab键时,则以TabIndex所标记的值从小到大的次序切换)。
图3.8电话的TabIndex属性值实验三窗体控件的特殊设置
(1) 如图3.9所示,单击“出生年月”所指的MaskedTextBox控件,并单击Properties窗口中Mask项右边的小图标。
图3.9MaskedTextBox控件位置示意图
(2) 如图3.10所示,在弹出的Input Mask对话框的掩码列表中选择“短日期格式”,并单击OK按钮。
图3.10短日期格式设置(3) 如图3.11所示,单击“性别”所指的ComboBox控件,并单击Properties窗口中Items项右边的小图标。
图3.11ComboBox控件位置示意图
(4) 如图3.12所示,在弹出的对话框中输入“男”“女”,并单击OK按钮。
图3.12Item内容填写示意图
(5) 类似前两步操作,在“学院”所指的ComboBox控件Items项中输入“管理学院”“经济学院”“理学院”,如图3.13所示。
图3.13学院的ComboBox控件填写示意图
实验四新建窗体
(1) 如图3.14所示,选择菜单Project→Add Windows Form。
图3.14创建Windows窗体示意图
(2) 如图3.15所示,在弹出的对话框中选择Windows Form,并在Name输入项中输入“w_systable.cs”,单击Add按钮。
图3.15添加Windows Form窗体
(3) 如图3.16所示,将窗体拉伸,以方便添加控件。
图3.16窗体拉伸
(4) 如图3.17所示,单击屏幕右边Toolbox中Containers中的TabControl控件,并单击w_systable窗体空白处。
图3.17添加TabControl控件示意图
(5) 将TabControl控件拉伸,并单击Properties窗口中TabPages项右边的小图标,如图3.18所示。
图3.18TabPages位置示意图
(6) 单击左边列表项中的tabPage1,单击弹出式窗口右边属性项的Text,输入对应值“学院”。单击左边列表项中的tabPage2,单击弹出式窗口右边属性项的Text,输入对应值“班级”。然后,单击OK按钮。(在图3.19中,在左边Members下方,可以单击Add按钮,添加新的tabPage,如单击一下将生成tabPage3),如图3.19所示。
图3.19添加新的tabPages示意图
(7) 单击屏幕右边Toolbox中的Data中的DataGridView项,并单击w_systable窗体空白处,然后拉伸DataGridView,如图3.20所示。
图3.20拉伸DataGridView效果示意图
(8) 如图3.21所示,为窗体添加4个Button控件,并修改其Text。
图3.21添加Button控件效果示意图
实验五完成练习
要求完成Stucour应用的所有窗口并把所有窗口连到菜单上。
1. w_clastu窗体
说明: 该窗体挂在“报表输出”菜单的子菜单项“各班学生列表”上,即要进入“报表输出”菜单的“各班学生列表”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_course();
a.MdiParent = this;
a.Show();其中,“选择输出范围”为Toolbox中Containers类型的GroupBox控件,“班级”为Toolbox中Common Controls类型的CheckBox控件,如图3.22所示。
图3.22w_clastu窗体示意图
2. w_collcour窗体
说明: 该窗体挂在“报表输出”菜单的子菜单项“各院课程列表”上,即要进入“报表输出”菜单的“各院课程列表”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_collcour();
a.MdiParent = this;
a.Show();w_collcour窗体如图3.23所示。
图3.23w_collcour窗体
3. w_stugrade窗体
说明: 该窗体挂在“报表输出”菜单的子菜单项“学生各科成绩表”上,即要进入“报表输出”菜单的“学生各科成绩表”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_stugrade();
a.MdiParent = this;
a.Show();w_stugrade窗体如图3.24所示。
图3.24w_stugrade窗体
4. w_courgrade窗体
说明: 该窗体挂在“报表输出”菜单的子菜单项“各科学生成绩表”上,即要进入“报表输出”菜单的“各科学生成绩表”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_courgrade();
a.MdiParent = this;
a.Show();w_courgrade窗体如图3.25所示。
图3.25w_courgrade窗体
5. w_courmark窗体
说明: 该窗体挂在“数据输入”菜单的子菜单项“课程成绩”上,即要进入“数据输入”菜单的“课程成绩”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_courmark();
a.MdiParent = this;
a.Show();w_courmark窗体如图3.26所示。
图3.26w_courmark 窗体6. w_course窗体
说明: 该窗体挂在“数据输入”菜单的子菜单项“课程数据”上,即要进入“数据输入”菜单的“课程数据”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_courmark();
a.MdiParent = this;
a.Show();w_course窗体如图3.27所示。
图3.27w_course窗体
7. w_enroll窗体
说明: 该窗体挂在“数据输入”菜单的子菜单项“学生选课数据”上,即要进入“数据输入”菜单的“学生选课数据”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_enroll();
a.MdiParent = this;
a.Show();w_enroll窗体如图3.28所示。图3.28w_enroll窗体
8. w_systable窗体(此窗体已在示例中完成一部分)
说明: 该窗体挂在“数据输入”菜单的子菜单项“初始设置”上,即要进入“数据输入”菜单的“初始设置”子菜单的Click事件代码编辑区,插入下列三行代码。Form a = new w_systable();
a.MdiParent = this;
a.Show();w_systable窗体如图3.29~图3.31所示。
图3.29w_systable 窗体的“学院”选项卡
图3.30w_systable窗体的“班级”选项卡
图3.31w_systable窗体的“学期”选项卡
CHAPTER 4


第4章数据库应用与数据
网格视图任务: 
(1) DataGridView连接与数据库表的连接。
(2) 有引用关系的表的关系定义。
(3) 创建student、enroll及course连接的视图。
(4) 有引用关系表的数据源定义及数据显示。
(5) 完成练习。
4.1概述4.1.1何为DataGridViewDataGridView控件,也称为数据网格视图控件,支持各种数据源的表格式数据显示。通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。DataGridView控件具有很高的可配置性和可扩展性,提供了大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当需要在Form应用程序中显示表格式数据时,可以优先考虑DataGridView。如果要在小型网格中显示只读数据,或者允许用户编辑数以百万计的记录,DataGridView将提供一个易于编程和良好性能的解决方案。
DataGridView的主要功能如下。
(1) 支持多种列类型,这些列类型能够满足大部分常见需要,且易于扩展或替换。
(2) 实现多种数据显示方式,即DataGridView能够显示非绑定的数据、绑定的数据源,或者同时显示绑定和非绑定的数据,以及自定义的数据等。
(3) 提供了自定义数据显示的多种方式,包括很多属性和事件,用于数据的格式化和显示。
(4) DataGridView使用户能够以多种方式操作单个网格组件。例如,可以冻结行和列,避免它们因滚动而不可见;隐藏行、列、表头;改变行、列、表头尺寸的调整方式等。
4.1.2在实验中使用DataGridView
在运用Visual Studio 2010进行数据库系统开发过程中,Visual Studio 2010数据网