Presentation is loading. Please wait.

Presentation is loading. Please wait.

Visual Basic.NET 程序设计语言课程内容

Similar presentations


Presentation on theme: "Visual Basic.NET 程序设计语言课程内容"— Presentation transcript:

1 Visual Basic.NET 程序设计语言课程内容
第一章:概述 第二章:使用窗体和控件 第三章:变量和数组 第四章:过程 第五章:判断结构与循环结构 第六章:验证用户输入 第七章:面向对象编程 第八章:处理错误和异常 第九章:菜单、状态栏和 工具栏 第十章:Web 窗体和 XML Web Service 第十一章:使用 ADO.NET 第十二章:部署应用程序 目的: 本章介绍对用户输入的数据进行验证的基本原则和实现方法; 重点: 验证用户输入的指导原则; 验证用户输入的方法; 课前温习: 条件表达式的编写,复杂条件表达式的结构; 判断结构的编写,If Then 语句及其变种和 Select Case 语句。

2 第六章 验证用户输入 限制用户输入 验证域数据 验证窗体数据 编写代码 创建用户界面 Debug and Deploy 使用 Visual
第六章 验证用户输入 Debug and Deploy 编写代码 访问数据 使用 Visual Studio .NET 调试和部署 创建用户界面 限制用户输入 验证域数据 验证窗体数据 注意: 加下划线为即将学到的内容。

3 多媒体 验证用户输入 重点: 验证用户输入的典型场景; 注意: 多媒体演示说明了用户验证的基本概念; 课堂提问:
多媒体 验证用户输入 重点: 验证用户输入的典型场景; 注意: 多媒体演示说明了用户验证的基本概念; 课堂提问: 对用户输入的数据进行验证可以从哪些方面着手? -例如格式、范围等。

4 限制用户输入 验证用户输入的指导原则 内建验证 使用 TextBox 属性 使用 Masked Edit 控件 6.1 限制用户输入 重点:
验证用户输入的基本原则; .NET中 提供的验证手段。

5 验证用户输入的指导原则 指导原则 在任何情况下都要防止用户输入无效数据 引导用户输入有效的数据 让用户在输入数据时有一定的灵活性
6.1.1 验证用户输入的指导原则 指导原则 在任何情况下都要防止用户输入无效数据 引导用户输入有效的数据 让用户在输入数据时有一定的灵活性 在设计时要考虑特定的验证需要 根据程序的具体要求,在合适的位置添加 验证代码 重点: 验证输入的指导原则和重要性; 注意: 任何情况下都需要验证是重要的原则,用户总是有可能输入错误的信息,因此必须对输入做验证以避免程序执行中出现不应有的错误; 课堂讨论: “提示用户”的重要性: 设想这样的场景,验证过程只告诉用户所输入的5个数据中有格式错误,但是并不指出具体哪个或者哪些数据错误,而且也不提供正确格式的样例,这时用户能够完成数据的输入吗(教师可以编写一个简单的 Windows 程序实现这样的场景)? -讨论的目的是提供明确、合适的提示,以帮助用户纠正错误。

6 内建验证 控件 验证技术 定义:内建验证是指控件固有的属性和方法,它们可以用来 限制和验证用户输入 。 提供内建验证的常用控件:
6.1.2 内建验证 定义:内建验证是指控件固有的属性和方法,它们可以用来 限制和验证用户输入 。 提供内建验证的常用控件: 控件 RadioButton 验证技术 只有“选中”和“不选”两种状态 CheckBox 只能对该控件进行“选中”和“清除”操作 CheckedListBox 提供一个有效输入列表 重点: 内建验证的概念; 注意: 控件通过自身的设计可以在一定程度上限制可能的输入,比如 CheckBox 只有两种状态,一组 RadioButton 中只有一个可以被选中; 课堂提问: 限制用户输入2月30日最好的办法是什么? -使用DateTimePikcer控件,让用户选择日期。由于控件没有提供这样的非法数据供用户选择,用户就无法输入这类错误数据。 ListBox 提供一个有效输入列表(图形或文字) DateTimePicker 只能输入日期或时间 MonthCalendar 只能输入某个日期范围 TextBox 可设置属性来限制和修改文本框中的输入

7 使用 TextBox 属性 控件 验证技术 可以设置 TextBox 控件中与验证相关的一些属性来限制或修 改用户输入
PasswordChar 可用来隐藏(或屏蔽)输入文本框的字符 MaxLength 设置文本框中允许输入的最大字符数 ReadOnly 提供一个预先确定的标准输入 CharacterCasing 根据程序要求改变字符的大小写 重点: TextBox 控件中可以使用的输入验证和限制功能; 注意: PasswordChar 用于防止输入的密码被显示出来,常用的 PasswordChar 是星号“*” ; 课堂提问: MaxLenght 可以用于什么场景? - 密码等长度有限制的内容。

8 使用 Masked Edit 控件 步骤 将 Masked Edit 控件添加到 ToolBox
重点: Masked Edit 在限制用户输入时的作用; 注意: Masked Edit 控件是一个ActiveX 控件,需要在 Visual Basic .NET 中手动添加至 ToolBox。相关的ActiveX 组件文件名是:MSMASK32.OCX ; 演示: 教师使用 Visual Studio .NET 集成开发环境,一边演示一边讲解; 参考: MSDN - Visual Basic:Masked Edit Control 。 例子代码如下: Sub InitMedDate() With Me.medDate 'This box will hold date information. .Mask = "##/##/##" .Text = "12/01/99" 'The user likes bold Arial font at double the default. 'Double the size of the control to fit. .FontName = "Arial" .FontBold = True .FontSize *= 2 .Height *= 2 .Width *= 2 End With End Sub Public Sub medDate_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles medDate.Enter 'The user prefers yellow on purple for entering text. Me.medDate.BackColor = Color.Purple Me.medDate.ForeColor = Color.Yellow Public Sub medDate_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles medDate.Leave 'Set the colors back to the default after leaving the edit box. Me.medDate.BackColor = Me.medDate.DefaultBackColor Me.medDate.ForeColor = Me.medDate.DefaultForeColor 设置 Masked Edit 控件的属性 访问并格式化用户所输入的数据

9 课堂练习 使用 Masked Edit 控件 将 Masked Edit 控件添加到 Toolbox
添加 Masked Edit 控件至 Form1 设置 Masked Edit 控件的属性 修改 Format 属性 参考: 设置 Format 属性时可以参考 MSDN - Visual Basic:Masked Edit Control  Format Property (Masked Edit Control) 访问并显示用户数据

10 第六章 验证用户输入 限制用户输入 验证域数据 验证窗体数据 编写代码 创建用户界面 Debug and Deploy 使用 Visual
第六章 验证用户输入 Debug and Deploy 编写代码 访问数据 使用 Visual Studio .NET 调试和部署 创建用户界面 限制用户输入 验证域数据 验证窗体数据 注意: 加下划线为即将学到的内容。

11 验证域数据 使用布尔函数 使用 ErrorProvider 组件 在控件和文本上设置焦点 修改用户输入 使用验证事件 6.2 验证域数据
重点: 验证数据的方法。

12 使用布尔函数 函数 描述 常见的布尔函数 IsNumeric 可用于测试用户是否输入了数字值 IsDate 可用于测试用户是否输入了日期值
6.2.1 使用布尔函数 常见的布尔函数 函数 描述 IsNumeric 可用于测试用户是否输入了数字值 IsDate 可用于测试用户是否输入了日期值 重点: 常见的预定义布尔函数; 注意: 主要用于检测格式错误。 示例 If IsNumeric(TextBox1.Text) Then MessageBox.Show("The text box contains a number.") End If

13 使用 ErrorProvider 组件 添加 ErrorProvider 至窗体 位于 ToolBox 的 Windows 窗体选项卡中
SetError 方法 第一个参数指定了错误图标出现的位置 ,第二个参数指 定了消息字符串 如果用户输入了非法数据,将会在窗体上显示错误图标 和消息 ErrorProvider1.SetError (Textbox1, "Please enter a valid date.") 重点: 用于 winform 程序的错误提示功能; 注意: ErrorProvider 的功能有两个部分组成,首先提示用户错误出现的位置,再向用户显示与这个错误相关的提示信息,因此在 ErrorProvider 的 SetError 方法中有两个参数,第一个是显示错误位置的控件,第二个是错误提示信息: ErrorProvider1.SetError (Textbox1, “Please enter a valid date.”) 课堂提问: ErrorProvider 减少了开发者哪些工作量? -不用设计显示错误提示的控件。 参考: MSDN .NET Framework Class Library ErrorProvider Class Example [Visual Basic, C#, C++] The following example demonstrates using the ErrorProvider class to notify the user of a data entry error. The example creates a Form that contains a TextBox control, a NumericUpDown control, and a ComboBox control, each validating its content, and an ErrorProvider for each control. The example sets error icon options using the BlinkRate and BlinkStyle properties and the SetIconAlignment and SetIconPadding methods. The SetError method is called with or without appropriate error text during a control’s Validated event, depending upon the content in the control. [C#] using System; using System.Drawing; using System.Windows.Forms; namespace ErrorProvider { public class Form1 : System.Windows.Forms.Form private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label6; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox nameTextBox1; private System.Windows.Forms.NumericUpDown ageUpDownPicker; private System.Windows.Forms.ComboBox favoriteColorComboBox; private System.Windows.Forms.ErrorProvider ageErrorProvider; private System.Windows.Forms.ErrorProvider nameErrorProvider; private System.Windows.Forms.ErrorProvider favoriteColorErrorProvider; [STAThread] static void Main() Application.Run(new Form1()); } public Form1() this.nameTextBox1 = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.ageUpDownPicker = new System.Windows.Forms.NumericUpDown(); this.favoriteColorComboBox = new System.Windows.Forms.ComboBox(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); // Name Label this.label1.Location = new System.Drawing.Point(56, 32); this.label1.Size = new System.Drawing.Size(40, 23); this.label1.Text = "Name:"; // Age Label this.label2.Location = new System.Drawing.Point(40, 64); this.label2.Size = new System.Drawing.Size(56, 23); this.label2.Text = "Age (3-5)"; // Favorite Color Label this.label3.Location = new System.Drawing.Point(24, 96); this.label3.Size = new System.Drawing.Size(80, 24); this.label3.Text = "Favorite color"; // ErrorBlinkStyle.AlwaysBlink Label this.label4.Location = new System.Drawing.Point(264, 32); this.label4.Size = new System.Drawing.Size(160, 23); this.label4.Text = "ErrorBlinkStyle.AlwaysBlink"; // ErrorBlinkStyle.BlinkIfDifferentError Label this.label5.Location = new System.Drawing.Point(264, 64); this.label5.Size = new System.Drawing.Size(200, 23); this.label5.Text = "ErrorBlinkStyle.BlinkIfDifferentError"; // ErrorBlinkStyle.NeverBlink Label this.label6.Location = new System.Drawing.Point(264, 96); this.label6.Size = new System.Drawing.Size(200, 23); this.label6.Text = "ErrorBlinkStyle.NeverBlink"; // Name TextBox this.nameTextBox1.Location = new System.Drawing.Point(112, 32); this.nameTextBox1.Size = new System.Drawing.Size(120, 20); this.nameTextBox1.TabIndex = 0; this.nameTextBox1.Validated += new System.EventHandler(this.nameTextBox1_Validated); // Age NumericUpDown this.ageUpDownPicker.Location = new System.Drawing.Point(112, 64); this.ageUpDownPicker.Maximum = new System.Decimal(new int[] {150,0,0,0}); this.ageUpDownPicker.TabIndex = 4; this.ageUpDownPicker.Validated += new System.EventHandler(this.ageUpDownPicker_Validated); // Favorite Color ComboBox this.favoriteColorComboBox.Items.AddRange(new object[] {"None","Red","Yellow", "Green","Blue","Purple"}); this.favoriteColorComboBox.Location = new System.Drawing.Point(112, 96); this.favoriteColorComboBox.Size = new System.Drawing.Size(120, 21); this.favoriteColorComboBox.TabIndex = 5; this.favoriteColorComboBox.Validated += new System.EventHandler(this.favoriteColorComboBox_Validated); // Set up how the form should be displayed and add the controls to the form. this.ClientSize = new System.Drawing.Size(464, 150); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.label6,this.label5,this.label4,this.label3, this.favoriteColorComboBox,this.ageUpDownPicker, this.label2,this.label1,this.nameTextBox1}); this.Text = "Error Provider Example"; // Create and set the ErrorProvider for each data entry control. nameErrorProvider = new System.Windows.Forms.ErrorProvider(); nameErrorProvider.SetIconAlignment (this.nameTextBox1, ErrorIconAlignment.MiddleRight); nameErrorProvider.SetIconPadding (this.nameTextBox1, 2); nameErrorProvider.BlinkRate = 1000; nameErrorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.AlwaysBlink; ageErrorProvider = new System.Windows.Forms.ErrorProvider(); ageErrorProvider.SetIconAlignment (this.ageUpDownPicker, ErrorIconAlignment.MiddleRight); ageErrorProvider.SetIconPadding (this.ageUpDownPicker, 2); ageErrorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.BlinkIfDifferentError; favoriteColorErrorProvider = new System.Windows.Forms.ErrorProvider(); favoriteColorErrorProvider.SetIconAlignment (this.ageUpDownPicker, ErrorIconAlignment.MiddleRight); favoriteColorErrorProvider.SetIconPadding (this.ageUpDownPicker, 2); favoriteColorErrorProvider.BlinkRate = 1000; favoriteColorErrorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink; private void nameTextBox1_Validated(object sender, System.EventArgs e) if(IsNameValid()) // Clear the error, if any, in the error provider. nameErrorProvider.SetError(this.nameTextBox1, ""); else // Set the error if the name is not valid. nameErrorProvider.SetError(this.nameTextBox1, "Name is required."); private void ageUpDownPicker_Validated(object sender, System.EventArgs e) if (IsAgeTooYoung()) // Set the error if the age is too young. ageErrorProvider.SetError(this.ageUpDownPicker, "Age not old enough"); else if (IsAgeTooOld()) // Set the error if the age is too old. ageErrorProvider.SetError(this.ageUpDownPicker, "Age is too old"); ageErrorProvider.SetError(this.ageUpDownPicker, ""); private void favoriteColorComboBox_Validated(object sender, System.EventArgs e) if (!IsColorValid()) // Set the error if the favorite color is not valid. favoriteColorErrorProvider.SetError(this.favoriteColorComboBox, "Must select a color."); favoriteColorErrorProvider.SetError(this.favoriteColorComboBox, ""); // Functions to verify data. private bool IsNameValid() // Determine whether the text box contains a zero-length string. return (nameTextBox1.Text.Length > 0); private bool IsAgeTooYoung() // Determine whether the age value is less than three. return (ageUpDownPicker.Value < 3); private bool IsAgeTooOld() // Determine whether the age value is greater than five. return (ageUpDownPicker.Value > 5 ); private bool IsColorValid() // Determine whether the favorite color has a valid value. return ((favoriteColorComboBox.SelectedItem != null) && (!favoriteColorComboBox.SelectedItem.ToString().Equals("None"))); private void InitializeComponent() // Standard control setup. //.... // You set the DataSource to a data set, and the DataMember to a table. errorProvider1.DataSource = dataSet1 ; errorProvider1.DataMember = dataTable1.TableName ; errorProvider1.ContainerControl = this ; errorProvider1.BlinkRate = 200 ; //... // Since the ErrorProvider control does not have a visible component, // it does not need to be added to the form. protected void buttonSave_Click(object sender, System.EventArgs e) // Checks for a bad post code. DataTable CustomersTable; CustomersTable = customersDataSet1.Tables["Customers"]; foreach (DataRow row in (CustomersTable.Rows)) if (Convert.ToBoolean(row["PostalCodeIsNull"])) row.RowError="The Customer details contain errors"; row.SetColumnError("PostalCode", "Postal Code required");

14 在控件和文本上设置焦点 设置焦点的原因: 当控件获得焦点时,用户可使用鼠标或键盘给 控件输入数据
6.2.3 在控件和文本上设置焦点 设置焦点的原因: 当控件获得焦点时,用户可使用鼠标或键盘给 控件输入数据 当用户输入无效数据时,应该使焦点一直位于 该控件,直至用户输入有效的数据 示例 使用 Focus 方法使 TextBox 控件获得焦点: 使用 SelectAll 方法选中控件中的文本: 重点: 在控件上设置焦点的方法; 课堂提问: 为什么需要设置焦点? - 把焦点设置到有错误数据的控件中,可以使用户马上修改,不需要再使用鼠标或者 Tab 键将焦点移动到该控件上; 如果不设置焦点会出现什么情况? - 用户需要先使用鼠标或者 Tab 键将焦点移动到该控件上,再修改其中的值。 TextBox1.Focus( ) TextBox1.SelectAll( )

15 修改用户输入 示例 函数 描述 使用下列函数修改用户输入的数据 : UCase 返回已转换为大写的字符串或字符 LCase
6.2.4 修改用户输入 使用下列函数修改用户输入的数据 : 示例 函数 描述 UCase 返回已转换为大写的字符串或字符 LCase 返回已转换为小写的字符串或字符 Trim 去处字符串开头和末尾的空格 重点: 使用函数修改用户的输入; 课堂提问: 为什么需要修改用户的输入? -目的是减少对用户输入的限制,方便用户。例如用户可能多输入了一个空格,使用 Trim 去掉,用户并不知道这个过程,避免了由用户来完成这个操作; 参考: MSDN Visual Basic Language Reference UCase Function Dim LowerCase, UpperCase As String LowerCase = "Hello World 1234" ' String to convert. UpperCase = UCase(LowerCase) ' Returns "HELLO WORLD 1234". MSDN Visual Basic Language Reference LCase Function Dim UpperCase, LowerCase As String Uppercase = "Hello World 1234" ' String to convert. Lowercase = LCase(UpperCase) ' Returns "hello world 1234". Dim LowerCase, UpperCase As String LowerCase = "Hello World 1234" ' String to convert UpperCase = UCase(LowerCase) ' Returns "HELLO WORLD 1234"

16 使用验证事件 Validated 事件 使用 CausesValidation 属性来触发控件的 Validating 事件
6.2.5 使用验证事件 使用 CausesValidation 属性来触发控件的 Validating 事件 Validating 事件 Private Sub WarehouseTextbox_Validating(. . .) If WarehouseTextbox.Text = "" Then infoErrorProvider.SetError(WarehouseTextbox, _ "Please enter a Warehouse name.") e.Cancel = True End If End Sub 重点: CausesValidation 属性; Validating 事件和 Validated 事件; 注意: CausesValidation 属性被设置成 False 时 Validating 和 Validated 事件都会被忽略; Validating 事件:当控件失去焦点时会触发此事件,因此在此事件中应该编写检验格式的代码,如果发生用户输入错误,使用 ErrorProvider.SetError 方法提示用户; Validated 事件:当 CancelEventArgs 的 Cancel 属性为 True 时表明验证通过,在这个事件的处理函数中清除错误提示信息,即 InfoErrorProvider.SetError(WarehouseTextbox, "")。 Validated 事件 Private Sub WarehouseTextbox_Validated(. . .) infoErrorProvider.SetError(WarehouseTextbox, "") End Sub

17 课堂练习 验证域数据 为 Validating 事件编写测试代码 使用 ErrorProvider 向用户发出错误警告
课堂练习 验证域数据 6.2.6 课堂练习 验证域数据 为 Validating 事件编写测试代码 使用 ErrorProvider 向用户发出错误警告 为 Validated 事件编写代码,以重置 ErrorProvider 注意: CancelEventArgs 的 Cancel 属性的使用; 参考: MSDN - NET Framework Class Library Control.Validated Event  测试应用程序

18 第六章 验证用户输入 限制用户输入 验证域数据 验证窗体数据 编写代码 创建用户界面 Debug and Deploy 使用 Visual
第六章 验证用户输入 Debug and Deploy 编写代码 访问数据 使用 Visual Studio .NET 调试和部署 创建用户界面 限制用户输入 验证域数据 验证窗体数据 注意: 加下划线为即将学到的内容。

19 验证窗体数据 验证一个窗体上的多个域 指定 Accept 和 Cancel 按钮 安全性问题 6.3 验证窗体数据 重点:
验证一个窗体上的多个控件; 使用 Accept 和 Cancel 按钮。

20 验证一个窗体上的多个域 给用户提供可视提示 示例 禁用 OK 按钮,直到输入完整的数据 一次验证窗体上所有的域
6.3.1 验证一个窗体上的多个域 给用户提供可视提示 示例 禁用 OK 按钮,直到输入完整的数据 一次验证窗体上所有的域 示例 使用 OK 按钮的 Click 事件处理程序来验证窗体 上每个文本框中的数据 重点: 验证多个域的目的; 课堂提问: 一次验证多个控件的好处; - 可以通过禁用按钮的方式提示用户必须输入所有信息。

21 指定 Accept 和 Cancel 按钮 设置窗体的 AcceptButton 属性 设置窗体的 CancelButton 属性 示例
指定 OKButton 按钮为接受按钮 指定 EscapeButton 按钮为取消按钮 重点: 指定 Accept 和 Cancel 按钮的方法; 注意: 在窗体中设置这两个按钮。

22 安全性问题 验证用户 验证当前 Windows 用户 使用 SystemInformation 对象的 UserName 属性 示例
6.3.3 安全性问题 验证用户 验证当前 Windows 用户 使用 SystemInformation 对象的 UserName 属性 示例 添加增强安全性的代码 MessageBox.Show("Current user is " & SystemInformation.UserName) 重点: 安全包括验证用户身份、限制用户权限两个方面。

23 回顾 学习完本章后,你将能够: 限制域中可输入的数据的类型 在域级别验证用户输入以确定输 入是否有效,并显示消息以帮助 用户纠正无效数据
Debug and Deploy 编写代码 访问数据 使用 Visual Studio .NET 调试和部署 创建用户界面 学习完本章后,你将能够: 限制域中可输入的数据的类型 在域级别验证用户输入以确定输 入是否有效,并显示消息以帮助 用户纠正无效数据 设置控件属性,以规定数据的输 入顺序、输入类型以及在应用程 序运行时如何显示数据 在窗体级别验证用户输入,并引 导用户发现和修正错误 重点: 限制用户输入的目的; 验证的基本原则; 验证用户输入的方法: 控件自身的逻辑; 使用自定义的代码检查; 自动转换数据; 使用专门的控件; 在 winform 中使用相关的事件; 注意: 验证用户输入的最终目的是帮助用户更好地使用程序,因此设计验证过程时需要以用户需求为中心,不能给用户造成使用上的不便; 课堂提问: .NET 中提供了哪些简便的验证用户输入的方法? - 例如验证格式的函数、ErrorProvider 等。

24 实验 6.1 验证用户输入 练习 验证用户输入 实验: 理解 Validating 和 Validated 事件;
实验 6.1 验证用户输入 练习 验证用户输入 实验: 理解 Validating 和 Validated 事件; 使用 ErrorProvider 组件的方法; 尝试使用各种不同的输入找出验证的漏洞; 实验预估时间:45 分钟。


Download ppt "Visual Basic.NET 程序设计语言课程内容"

Similar presentations


Ads by Google