610 likes | 731 Views
第 8 章 控件及 GUI 程序设计. 主要内容与学习目标. 主要内容: (1) 滚动条、用户定义的颜色。 (2) Windows 窗体事件及事件处理程序。 (3) 创建具有默认名称的默认事件处理程序、将多个事件绑定到单个事件处理程序。 (4) 使用事件处理程序中引发事件的对象参数。 (5) 复选框和单选按钮。 (6) Connection 和 Command 对象。 (7) 创建到数据库的连接、打开到数据库的连接、关闭到数据库的连接。 (8) 创建 sqlCommand 对象、使用 sqlCommand 对象执行 SQL 命令。
E N D
主要内容与学习目标 • 主要内容: • (1) 滚动条、用户定义的颜色。 • (2) Windows窗体事件及事件处理程序。 • (3) 创建具有默认名称的默认事件处理程序、将多个事件绑定到单个事件处理程序。 • (4) 使用事件处理程序中引发事件的对象参数。 • (5) 复选框和单选按钮。 • (6) Connection和Command对象。 • (7) 创建到数据库的连接、打开到数据库的连接、关闭到数据库的连接。 • (8) 创建sqlCommand对象、使用sqlCommand对象执行SQL命令。 • (9) 创建三层应用程序。 • (10)TabControl控件。 • (11)SqlDataReader。 • (12)图片框控件。 • (13)组合框和文本框。 • (14)列表框。 • (15)带复选框的列表框。 • 学习目标: • (1) 创建图形用户界面。 • (2) 创建并操作按钮、滚动条、文本框和标签。 • (3) 使用列表框和组合框显示列表。 • (4) 理解、使用并创建事件。 • (5) 使用Connection、Command和SqlDataReader对象。 • (6) 创建三层应用程序。
8.1 滚动条 • 可使用滚动条控件为用户输入数值数据,该数值数据可以在控件中显示,也可以在代码中使用。或为自身不提供滚动条的容器(如PictureBox)实现滚动。 • 任务8.1:调色板 • 问题描述:创建一调色板程序,说明怎样使用滚动条为用户输入数值数据,该数值数据在代码中使用以调节颜色和透明度,并将数据值显示在控件中。 • 调色板程序的功能如下。 • (1)当程序被启动时,水平滚动条的滑块处于滚动条的最右端, 垂直滚动条的滑块处于滚动条的最下端,标签中显示每一滚动条的值(如图8.1所示)。 • (2)通过单击“滚动条”的右箭头图标或左箭头图标来改变滚动条滑块的位置,标签的正文能反映这个变化。例如,当水平滚动条的滑块在左端时,标签显示值为0;当滑块在右端时,标签显示值为255。水平滚动条的滑块位置改变时,标签的背景颜色发生改变,垂直滚动条的滑块滚动时,标签的透明度发生改变。 • 解决方案: • (1)创建名为Mycolor的【Windows应用程序】项目。 • (2)添加控件并设置属性。选择新建窗体,按照如图8.1所示的界面布局从“工具箱”的【Windows窗体】选项卡中,向新建的窗体添加控件,用鼠标将控件拖放到适当位置。根据表8.1设置控件的属性。 • (3)编写应用程序的代码。 • (4)将vsbA、hsbG和hsbB的Scroll事件绑定到事件处理程序ScrollBar_Scroll。 • (5)测试应用程序。 • 8.1.1 滚动条常用属性 • 8.1.2 滚动条常用事件 • 8.1.3 用户定义的颜色
8.1.1 滚动条常用属性 • 1. Minimum • 2. Maximum • 注意:滚动条的最大值不能通过运行时的用户交互来达到。用户交互可以达到的最大值等于Maximum。 • 3. Value • 4. LargeChange • 5. SmallChange
8.1.2 滚动条常用事件 • Scroll事件为滚动条常用事件。 • 在通过鼠标或键盘操作移动滚动框后发生Scroll事件。该事件可由多种操作产生,例如单击滚动条箭头、按向上箭头或向下箭头、或者拖动滚动框。 • 一般来说,在设计阶段设置滚动条的Max、Min、LargeChange和SmallChange属性,而在程序运行阶段通过Scroll事件过程获取Value属性赋值的变化,监视用户对滚动条的操作。
8.1.3 用户定义的颜色 • 可以使用Color.FromArgb方法创建用户定义的颜色。此方法使您可以指定一种颜色中红色、蓝色和绿色各部分的强度。 • 此代码生成一种用户定义的颜色,该颜色大致为略带蓝色的灰色。每个数字均必须是从0到255之间的一个整数,其中0表示没有该颜色,而255则为所指定颜色的完整饱和度。因此,Color.FromArgb(0, 0, 0)呈现为黑色,而Color.FromArgb(255, 255, 255)呈现为白色。 • 使用此方法还可以指定Alpha部分。这时Color.FromArgb方法还要增加一个参数Alpha,Alpha表示所呈现图形后面的对象的透明度。如果需要指定Alpha部分,则它应为Color.FromArgb方法中4个参数的第一个参数,并且需要从0到255之间的一个整数。 • FromArgb(int alpha, int red, int green, int blue)方法从4个ARGB分量(alpha、红色、绿色和蓝色)值创建Color结构。其中参数如下。 • alpha:透明度分量。有效值为从0到255。 • red:红色分量。有效值为从0到255。 • green:绿色分量。有效值为从0到255。 • blue:蓝色分量。有效值为从0到255。 • 此方法的返回值为创建的Color结构。 • 在以上调色板程序中,用垂直滚动条vsbA指定alpha参数的值,水平滚动条hsbR指定red参数的值,水平滚动条hsbG指定green参数的值,水平滚动条hsbB指定blue参数的值。具体代码如下: • alpha = vsbA.Value; • red = hsbR.Value; • green = hsbG.Value; • blue = hsbB.Value; • 由于Color.FromArgb方法中每个参数的有效值为从0到255。因此每个滚动条的Minimum和Maximum属性分别设置为0和255,它们确定了用户可以选择的值范围。
8.2 Windows窗体事件及事件处理程序 • 事件是可以通过代码响应或“处理”的操作。事件可由用户操作(如单击鼠标或按某个键)、程序代码生成或系统生成。 • 事件处理程序是绑定到事件的方法。当引发事件时,执行事件处理程序内的代码。每个事件处理程序提供两个参数。下面的例子显示button控件的Click事件的事件处理程序button1_Click: • private void button1_Click(object sender, System.EventArgs e) • { • } • 第一个参数sender提供对引发事件的对象的引用。第二个参数e是要处理的事件对象,通过引用事件对象的属性(有时引用其方法)可获得一些信息,如单击鼠标事件中鼠标的位置。 • 在前面的示例中,事件处理程序不需要使用由事件源对象和事件数据对象提供的信息。但在很多情况下,如果事件处理程序需要使用由事件源对象和事件数据对象提供的信息,这时事件处理程序就需要使用事件处理程序中的两个参数。 • 任务8.2:计算器 • 问题描述:创建一计算器应用程序(如图8.2所示),该计算器能实现加、减、乘、除、倒数等功能。 • 8.2.1 Button按钮的常用属性 • 8.2.2 Button按钮的常用事件
8.2.1 Button按钮的常用属性 • 1. Text • 注意:如果具有焦点的控件接受并处理按Enter键的操作,则Button不处理此操作。例如,如果某个多行的TextBox控件或其他按钮具有焦点,则该控件将处理按Enter键的操作,而不是“接受”按钮处理此操作。 • 2. FlatStyle
8.2.2 Button按钮的常用事件 • Click事件:用户单击按钮时发生该事件。
8.3 复选框和单选按钮 • 复选框和单选按钮是两种状态按钮,它们可为用户提供“是/否”或“真/假”选择。但复选框和单选按钮不同,用户可以从成组使用的复选框中选择一项或多项,但在成组使用的单选按钮中一次只能选择一个单选按钮。单选按钮常用于互相排斥的选项。 • 任务8.3:Font程序 • 问题描述:创建如图8.3所示的字体应用程序,当单击复选框时,文本框的文字显示不同的字体,当单击单选按钮时,文本框的文字显示不同的颜色。 • 解决方案: • (1)创建项目和窗体。 • ① 创建名为font的Windows应用程序。 • ② 按图8.3所示的界面向窗体上添加控件。按表8.3设置属性。 • (2)向窗体类中添加字段和方法。 • (3)编写复选框的CheckedChanged事件处理程序。 • (4)编写单选按钮的CheckedChanged事件处理程序。 • 8.3.1 如何设置字体 • 8.3.2 复选框的常用属性 • 8.3.3 复选框的常用事件 • 8.3.4 单选按钮的常用属性 • 8.3.5 单选按钮的常用事件
8.3.1 如何设置字体 • Font类定义特定的文本格式,包括字体、字号和字形属性。使用Font类创建Font类的对象。 • 1. 创建Font类的对象 • 2. Font类的常用属性
8.3.2 复选框的常用属性 • 1. Checked • 2. CheckState • 读取或设置复选框的状态。其值为CheckState枚举值之一。表8.4列出了CheckState枚举值及为该值时复选框控件对应于不同Appearance属性的外观。 • 3. Text • 4. Appearance
8.3.3 复选框的常用事件 • 1. Click • 2. CheckedChanged • 3. CheckStateChanged
8.3.4 单选按钮的常用属性 • 1. Checked • 使用Checked属性可以获取或设置单选按钮的状态。若选中了单选按钮,则属性值为true;反之,则为false。 • 2. Text • 单选按钮右侧显示的文本。
8.3.5 单选按钮的常用事件 • 1. Click • 在单击单选按钮控件时发生。 • 2. CheckedChanged • 每次选中或取消选中单选按钮的时候发生。当用户双击设计器中的这个控件时,该事件为默认事件。
8.4 Connection对象和Command对象 • 前面的章节忽略了数据存储问题,系统停止运行后所有的数据都会消失。当然,在一个真实的应用程序中,必须找到存储数据的一种方式,我们可以使用数据库对数据进行存储。 • 访问数据库的第一步是与数据库源建立连接,只有建立了连接,才有可能实现在数据库和应用程序之间移动数据。ADO.NET提供了以下两个连接对象,可以使用这两个连接对象之一创建和管理应用程序与数据库之间的连接。这些连接对象具有各种属性和方法,可以使用它们打开和关闭数据库连接,并且发出查询请求来更新信息。 • SqlConnection:该对象管理与 SQL Server 7.0 版或更高版本的连接。 • OleDbConnection:该对象管理与可通过OLE DB访问的任何数据存储区的连接。 • 8.4.1 Connection对象 • 8.4.2 Command对象
8.4.1 Connection对象 • 任务8.4:创建并打开一个到SQL Server的连接 • 问题描述:创建一应用程序,该程序演示如何使用SqlConnection对象创建和打开一个到SQL Server的连接,如何使用SqlCommand对象提交一个SQL命令,以修改SQL Server数据库(见图8.4)。 • 解决方案: • (1)创建项目和窗体。创建名为TestSQL 的Windows应用程序。按图8.4所示的界面向窗体上添加控件。并按表8.5设置属性。 • (2)编写连接数据库的代码。双击【连接】按钮。添加如下代码到btnConnect_Click 事件处理程序中: • (3)测试程序。按F5键运行该应用程序。单击【连接】按钮,打开如图8.5所示的显示连接消息框。
8.4.2 Command对象 • Command对象可用来存放要对SQL Server数据库执行的一个Transact-SQL语句或存储过程,并能执行该Transact-SQL语句或存储过程,利用Command对象可直接对数据库进行处理。 • 任务8.5:操作数据库 • 问题描述:继续完成“任务8.4”,单击【执行SQL】按钮,使用文本框中输入的SQL命令修改SQL Server数据库中的数据。 • 解决方案: • (1)打开frmConnect窗体。 • (2)双击【执行SQL】按钮。在btnExecute_Click事件处理程序中输入代码 • (3)测试程序。按F5键运行该应用程序。在文本框中输入对Northwind数据库中的表有效的INSERT、UPDATE或DELETE命令。单击【执行SQL】按钮,执行btnExecute_Click事件处理程序,所影响的行数显示在文本框中(如图8.6)。
8.5 使用SqlDataReader • SqlDataReader提供了一种读取通过在数据源执行查询命令获得的结果集中的数据的一种方法。SqlDataReader是实现IDataReader接口的类,若要创建SqlDataReade对象,必须调用SqlCommand对象的ExecuteReader方法,而不直接使用构造函数。SqlDataReader是一个包含表格式形式(即行和列)的查询结果集。可通过SqlDataReader对象的属性或方法访问SqlDataReader中的数据。 • 任务8.6:雇员信息管理 • 问题描述:对SQL Server中的Northwind数据库创建一数据库应用程序,该应用程序能够实现浏览每一雇员的相关信息,如图8.7所示。 • 解决方案: • (1)创建项目和窗体。创建项目名为Northwind的Windows应用程序。 • (2)向Windows窗体添加选项卡并设置选项卡的属性。Windows窗体TabControl显示多个选项卡,这些选项卡类似于笔记本中的分隔卡和档案柜文件夹中的标签。选项卡中可包含图片和其他控件。 • (3)将控件添加到选项卡页。 • ①单击【个人信息】选项卡页以使其显示在最前面。 • ②按图8.8所示的界面从“工具箱”的【Windows窗体】选项卡中,向【个人信息】选项卡添加控件,用鼠标将控件拖放到适当位置。并向Windows窗体添加7个按钮控件。 • ③根据属性表8.6设置控件的属性。 • ④单击【其他信息】选项卡页以使其显示在最前面。 • ⑤按图8.9所示的界面从“工具箱”的【Windows窗体】选项卡中,向【其他信息】选项卡添加控件,用鼠标将控件拖放到适当位置。 • ⑥根据属性表8.7设置控件的属性。 • ⑦创建Employee类。
8.6 创建三层应用程序 • 三层应用程序设计要求应用程序中交互作用的对象被分成3种类——问题域类、GUI类和数据存取类。问题域类是特定于业务应用程序的对象的类,如雇员(Employee)类、客户(Customer)类和产品(Product)类等,问题域类是对实际的业务实体的建模,它用来封装对象的数据,存储对象的信息。GUI类可将组成用户界面的对象定义到应用程序中,如按钮、标签、文本框和列表框等。GUI类提供用于数据输入和显示的用户界面。数据存取类提供存取对象有关的操作,将对象的有关信息存储于数据库或文件中,以实现对象的永久存储,供以后使用,或从数据库中检索数据存储于对象中,供其他对象使用。 • 三层设计要求应用程序开发人员在设计和构建应用程序时定义3种类。首先,程序设计人员标识和定义问题域类。然后定义数据存取类以允许问题域类与数据存取类的交互作用。定义了这些类之后程序设计人员就会定义如何使用GUI类以允许用户与问题域类的交互作用。这三层全部完成之后,它们即准备联合起来作为一个完整的应用程序。图8.10显示了这三层是如何交互作用的。 • 三层结构可以满足常用的MVC设计模式。让这三层将用户界面、业务应用程序对象和数据存取类的功能分离,系统维护变得简单化,因为对GUI所做的许多更改都不会影响问题域类和数据存取类。同样,对数据存取类所做的许多更改也不会影响问题域类或GUI类。例如,可以对数据存取类进行修改从而升级或更改数据库管理软件(如将SQL Server改为Oracle),但不会影响问题域类或GUI类,同样,可以对图形用户界面进行升级或更改,也不会影响其他层。 • 任务8.7:增强雇员信息管理程序
8.7 PictureBox图片框控件 • 通常使用PictureBox来显示位图、图标、JPEG或GIF文件中的图形。 • 在设计时或运行时将Image属性设置为要显示的图像。在显示区域中剪辑和定位图像由设置为PictureBoxSizeMode枚举中的值的SizeMode属性来控制。 • 默认情况下,PictureBox控件在显示时没有任何边框。即使图片框不包含任何图像,仍可以使用BorderStyle属性提供一个标准或三维的边框,以便使图片框与窗体的其余部分区分。 • 任务8.8:雇员相片管理 • 问题描述:增强雇员管理程序的功能,要求能够修改、添加和删除雇员的相片(如图10.11所示)。 • 8.7.1 PictureBox的常用属性 • 8.7.2 PictureBox的常用事件 • 8.7.3 Image.FromFile方法
8.7.1 PictureBox的常用属性 • 1. Image • 2. BorderStyle • 指示控件的边框样式。属性值为BorderStyle枚举值之一。BorderStyle枚举值见表8.8。 • BorderStyle属性默认值为None。
8.7.2 PictureBox的常用事件 • 1. Click • 用户单击控件时发生该事件。 • 2. DoubleClick • 用户双击控件时发生该事件。
8.7.3 Image.FromFile方法 • Image.FromFile(string filename)方法从指定的文件创建Image对象。 • 其中filename为字符串,它包含要从中创建 Image对象的文件的名称。此方法的返回值为创建的Image对象。
8.8 组合框控件和文本框控件 • Windows窗体ComboBox控件用于在下拉组合框中显示数据。默认情况下,ComboBox控件分两个部分显示:顶部是一个允许用户输入列表项的文本框。第二部分是一个列表框,它显示一个项列表,用户可从中选择一项。 • SelectedIndex属性返回一个整数值,该值与选定的列表项相对应。通过在代码中更改 SelectedIndex值,可以编程方式更改选定项;列表中的相应项将出现在组合框的文本框部分。如果未选定任何项,则SelectedIndex值为-1。如果选定列表中的第一项,则SelectedIndex 值为0。SelectedItem属性与SelectedIndex类似,但它返回项本身,通常是一个字符串值。Items.Count属性反映列表中的项数,并且Items.Count属性的值总比SelectedIndex的最大可能值大1,因为SelectedIndex是从零开始的。 • 若要在ListBox控件中添加或删除项,可使用Items.Add、Items.Insert、Items.Clear 或 Items.Remove方法。或者,可以在设计器中使用Items属性向列表添加项。 • TextBox控件可用于接受密码,可以使用PasswordChar属性屏蔽在控件的单行版本中输入的字符。也可以通过将ReadOnly属性设置为true来限制TextBox控件中的所有数据项输入。 • 任务8.9:登录程序 • 问题描述:创建一个Login程序(如图8.12所示),让用户选择登录名称,输入密码,在【确定】命令按钮的Click事件中,调用事件处理程序,验证用户输入的密码(密码为用户名称加用户的出生日期)。Login程序还提供了一个用户的图片和文本描述。如果验证用户输入的密码正确,则进入雇员管理窗体。 • 8.8.1 ComboBox的常用属性和方法 • 8.8.2 列表框控件的常用事件 • 8.8.3 TextBox的常用属性 • 8.8.4 TextBox的常用事件
8.8.1 ComboBox的常用属性和方法 • 1. Items • 2. SelectedIndex • 3. SelectedItem • 4. Text • 5. DropDownStyle • 该属性确定要显示的组合框的样式,也就是确定用户能否在文本部分中输入新值以及列表部分是否总显示。其枚举值如表8.10所示。 • 6. ComboBox.Items.Add • 7. ComboBox.Items.Insert • 8. ComboBox.Items.Remove • 9. ComboBox.Items.RemoveAt • 10. ComboBox.Items.Clear
8.8.2 列表框控件的常用事件 • SelectedIndexChanged • 选定的索引发生变化时会发生该事件。
8.8.3 TextBox的常用属性 • 1. Text • 2. PasswordChar • 3. MaxLength • 4. ReadOnly • 5. ScrollBars • 获取或设置哪些滚动条应出现在多行TextBox控件中。属性值为ScrollBars枚举值之一(见表8.11),以指示多行TextBox控件在显示时没有滚动条、有水平滚动条、有垂直滚动条还是两种滚动条都有。默认值为ScrollBars.None。 • 6. Multiline • 7. TextBoxBase.WordWrap • 8. SelectionStart • 9. SelectionLength • 10. TextAlign • 获取或设置TextBox控件中文本的对齐方式。属性值为HorizontalAlignment枚举值之一(见表8.12),以指定控件中文本的对齐方式。默认值为HorizontalAlignment.Left。 • 11. AcceptsReturn