WinForm、数组、流程控制和WinForm基本控件PPT课件_第1页
WinForm、数组、流程控制和WinForm基本控件PPT课件_第2页
WinForm、数组、流程控制和WinForm基本控件PPT课件_第3页
WinForm、数组、流程控制和WinForm基本控件PPT课件_第4页
WinForm、数组、流程控制和WinForm基本控件PPT课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows程序设计 1 1 数组一维数组多维数组交错数组2 流程控制语句顺序流程分支语句循环语句异常处理语句3 WinForm常用控件4 Windows窗体应用程序实例 无纸考试系统 本讲主要内容 2 1 数组 数组表示相同类型的对象的集合 数组是引用类型 声明数组类型是通过在某个类型名后加一对方括号来构造的 常用数组的语法声明格式 3 1 数组 数组的秩 rank 是指数组的维数 如一维数组秩为1 二维数组秩为2 数组长度是指数组中所有元素的个数 例如 int a newint 10 10个元素 分别为a 0 a 1 a 9 int b newint 3 5 长度为3 5 15 其中第0维长度为3 第1维长度为5 4 1 1一维数组 数组的下标默认从0开始索引 假如数组有30个元素 则一维数组的下标范围为0 29 可通过在中括号内指定下标来访问某个元素 例如 int a newint 30 a 0 23 为a数组中的第一个元素赋值23a 29 67 为a数组中的最后一个元素赋值67一维数组的Length属性表示数组的长度 例如 intarrayLength a Length 值为30 5 1 1一维数组 元素个数确定后 数组的长度就确定了 例如 int a1 newint 30 a1共有30个元素 分别为a1 0 a1 29 intnumber 10 string a2 newString number a2共有numer个元素也可以在声明语句中直接用简化形式为各元素赋初值 例如 string a first second third 或string a newstring first second third 6 1 1一维数组 注意 不带new运算符的简化形式只能用在声明语句中 比较下面的写法 string a1 first second third 正确string a2 newstring first second third 正确string a3 a3 first second third 错误string a4 a4 newstring first second third 正确Int a4 newint 3 1 3 5 正确 如果指定了数组长度 初始化时必须给所有元素赋值 7 1 2多维数组 多维数组 指维数大于1的数组 常用的是二维 下面的3条语句作用相同 都是创建一个3行2列的数组 int n1 newint 3 2 1 2 3 4 5 6 int n2 newint 1 2 3 4 5 6 int n3 1 2 3 4 5 6 下面的语句创建一个三维数组 int array3D newint 1 2 3 4 5 6 本例由两个二维数组构成 7 8 9 10 11 12 8 1 3交错数组 交错数组 即每个元素又是一个数组 int n1 newint 2 数组n1有2个元素 每个元素是一维数组newint 2 4 6 newint 1 3 5 7 9 注意 初始化交错数组时 每个元素的new运算符不能省略 int n2 newint 2 n2 0 newint 2 2 1 2 3 4 n2 1 newint 2 3 1 2 3 4 5 6 则 数组n2有2个元素 每个元素是二维数组 且myArray3 1 1 1 5 9 1 4数组的常用操作方法 1 数组的统计运算Average方法 Sum方法 Max方法和Min方法 2 字符串数组和字符串之间的转换可直接用string的静态Join方法和静态Split方法实现字符串和字符串数组之间的转换 Join方法相当于将多个字符串插入分隔符后合并在一起 publicstaticstringJoin stringseparator string value 例如 string books Java C C VB NET Console WriteLine string Join books 10 Split方法用于将字符串按照指定的一个或多个字符进行分离得到一个字符串数组 常用语法为publicstring Split paramschar separator 例如 Strings abc12 34 56 String sArray s Split 以空格 逗号 分号为标志分割字符串s 分割后的各个子串 不包括分割标志 成为sArray的一个元素 1 4数组的常用操作方法 11 1 4数组的常用操作方法 2 数组元素的复制 排序与查找常用有 Copy方法 将一个数组中的全部或部分元素复制到另一个数组中 Sort方法 使用快速排序算法 将一维数组中的元素按照升序排列 Reverse方法 反转一维数组中的元素 另外 还可以使用该类提供的Contains方法和IndexOf方法查找指定的元素 12 例2 1 编写一个WinForm应用程序 演示数组的声明与初始化 并分别输出数组的秩 数组长度以及数组中的每个元素的值 演示利用Random类产生随机数的方法 并利用随机数填充数组 13 1 5例2 1演示数组编程 13 说明 Random类概述 System Random用于产生伪随机数 随机数的生成是对一个称为 种子 的值进行处理 按照某个算法计算而得 如果反复使用同一个种子 就会生成相同的数字系列 产生不同序列的一种方法是使种子值与时间相关 从而对于Random的每个新实例 都会产生不同的系列 因为时钟的分辨率有限 所以 如果使用无参数构造函数连续创建不同的Random对象 就会创建生成相同随机数序列的随机数生成器 通过创建单个Random对象 然后随时间推移生成多个随机数 可以避免此问题 14 说明 Random类概述 构造函数 Random 使用与时间相关的默认种子值 Random Int32 使用指定的种子值 方法Next 返回非负随机数 小于最大整数Next Int32 返回一个小于所指定最大值的非负随机数 Next Int32 Int32 返回一个指定范围内的随机数 NextBytes用随机数填充指定字节数组的元素 NextDouble返回一个介于0 0和1 0之间的随机数 15 1 设计一个类ArrayExample 用来演示数组的用法 参见文件 源程序 txt 2 制作如图所示窗体 1 5例3 1演示数组编程 其中TextBox的属性 设置为Multiline true textBox1 ScrollBars ScrollBars Both Wordwrap false 控件的属性也可以通过代码进行设置 一般在Form1的构造方法中设置控件属性的初始值 在代码中通过 注册指定的事件 通过 注销指定的事件 当熟悉代码后 这种办法是最灵活也是方便的办法 16 2 流程控制语句 最基本的语句staticvoidMain inta 声明语句intb 2 c 3 声明语句a b c 1 表达式语句constfloatpi 2 14f 声明语句constintr 25 声明语句doublem pi r r 表达式语句 17 2 1分支语句 C 语言提供了两种分支语句 1 if语句If if else if elseif if elseif elseif else 2 switch语句switch语句中可包含许多case块 每个case标记后可以指定一个常量值 常量值 指switch中的条件表达式计算的结果 例如 字符串 张三 字符 a 整数 25另外还可以是枚举等 18 2 1分支语句 2 switch语句switch 条件表达式 case常量1 语句序列1break case常量2 语句序列2break default 语句序列nbreak 19 2 2循环语句 包括for语句 while语句 do语句和foreach语句 1 for语句for 初始值 循环条件 循环控制 语句序列 2 foreach语句foreach 类型标识符in表达式 语句序列 3 while语句while 条件表达式 语句序列 4 do语句do 语句序列 while 条件表达式 20 2 3跳转语句 1 break语句退出最近的封闭switch while do for或foreach语句 2 continue语句将控制直接传递给下一次循环 此语句可以用在while do for或foreach语句块的内部 3 return语句将控制返回到出现return语句的函数成员的调用方 格式 return 或return表达式 带表达式的return语句用于方法的返回类型不为null的情况 21 概念异常是程序运行过程中可能出现的不正常的情况 例如除以0 通信失败等 可以编程捕获异常并加以处理 如给用户提示或退出程序等 从程序设计的角度看 错误与异常的主要区别在于 错误可以通过修改程序解决或避免 例如语法错误和运行时的逻辑错误 异常是指无法通过程序手段加以避免的问题 如在通信过程中网线断开 这个问题无法通过程序本身来避免 这就是一个异常 在程序运行过程中出现异常 运行时系统 CLR 会自动生成一个与该异常相对应的异常类对象 并在程序中寻找代码处理异常 如果找不到处理代码 程序将弹出异常对话框 提示是否退出 一般通过try catch finally语句来捕获和处理异常 通常在容易出现异常的场合使用try catch语句 例如验证用户输入 文件存盘 建立通信连接等 如果程序只对内存操作 一般不需要异常处理语句 2 4异常处理语句 22 2 4异常处理语句 1 try catch finally语句try 语句序列 系统尝试执行try块 不成功则放弃 并抛出异常 Try块中异常语句后面的代码将不被执行 直接执行catch块中的语句 catch 异常类型标识符 异常处理 可以有多个catch块用来捕获不同的异常finally 语句序列 在try块中的任何语句产生异常 如除以0 都会执行catch块中的语句来处理异常 即便catch块中没有语句 系统也不再弹出异常对话框 无论是否有catch块 finally总会被执行 一般用来释放资源 如关闭文件和数据库2 throw语句主动抛出异常并让调用这个方法的程序进行捕捉和处理 23 NET定义了几十个类描述可能出现的异常 程序可以预估可能出现的异常并使用这些类进行捕获 对于未知异常 一般采用这些类的基类Exception进行捕获 例如 如果你知道某段代码可能出现除以0的异常 就可以使用DivideByZeroException类来捕获 有时为了使程序的逻辑比较简单 只利用try块不成功便放弃的特点 令catch块为空 并通过其他语句设法避开异常 2 4异常处理语句 24 下面举例说明异常处理语句的用法 注意如下几种情况 1 不处理异常 2 处理异常且catch块有语句 3 处理异常但catch块没有语句 4 处理用户输入异常的技巧除此之外 还注意以下与异常处理无关的技巧 1 在程序的任意位置获得主窗体引用 2 如何让用户输入密码 3 错误提示控件的应用 4 安排控件的Tab顺序 先选中窗体设计窗口 然后在开发环境的 视图 菜单上 选择 Tab键顺序 2 5例2 2异常的捕获和处理 25 新建WinForm项目ex2 2设计如图所示窗体 2 5例2 2异常的捕获和处理 Button1 Button2 Button3 Button4 Button5 textBox1 textBox2 textBox3 textBox4 label1 textBox5 26 设计ExceptionExClass类 参见文件 源程序 txt 向button1的click事件中添加如下方法 privatevoidbutton1 Click objectsender EventArgse ExceptionExClassec newExceptionExClass ec Nohandle 向button2的click事件中添加如下方法 privatevoidbutton2 Click objectsender EventArgse ExceptionExClassec newExceptionExClass ec DividedByZero 2 5例2 2异常的捕获和处理 27 设计VerifyInput类 参见文件 源程序 txt 给button3和button4添加click事件privatevoidbutton3 Click objectsender EventArgse if VerifyInput verify1 textBox2 Text textBox1 Text 解析成功 else textBox1 Text 请输入合法数值 privatevoidbutton4 Click objectsender EventArgse if VerifyInput Verify2 textBox3 Text textBox1 Text 解析成功 else textBox1 Text 请输入合法数值 2 5例2 2异常的捕获和处理 28 向主窗体拖放一个ErrorProvider控件 设置textBox5的PasswordChar属性为 为button5添加click事件privatevoidbutton4 Click objectsender EventArgse if VerifyInput VerifyName textBox3 Text false errorProvider1 SetError textBox3 用户名错误 return else errorProvider1 Clear if VerifyInput VerifyPassword textBox4 Text false errorProvider1 SetError textBox4 密码错误 return else errorProvider1 Clear textBox1 Text 登录成功 2 5例2 2异常的捕获和处理 29 3 WinForm常用控件 System Windows Forms Control 命名空间 所有控件的基类 在 NET中 Form也是控件 是能承载消息循环的容器控件 本质上讲 Windows程序的所有界面元素都是窗口 但只有常规窗口和对话框 在 NET中称为窗体 运行消息循环代码 其他窗口例如控件 菜单等 只是被动接收来自主窗口的通知消息 30 常用控件包括 窗体 其他控件的容器label 显示静态文本TextBox 用户输入文本button CheckBox RadioButton 普通按钮 复选 单选ListBox ComboBox 列表框 下拉框GroupBox Panel 容器控件 Panel控件和GroupBox控件均用于对控件进行分组不同之处 Panel控件不能显示标题但可以有滚动条 而GroupBox控件可显示标题但不能显示滚动条 TabControl 属性页Splitter 将窗体分割为多个窗格NumericUpDown 旋钮MenuStrip ToolStrip StatusStrip ContextMenuStrip 菜单 工具条 状态条 快捷菜单timer 定时器ProgressBar 进度条PictureBox 显示图片NotifyIcon 通知图标 3 WinForm常用控件 31 3 1窗体的创建 显示 隐藏和关闭 如何在代码中打开一个新窗体Form2fm newForm2 fm Show 或者Form2fm newForm2 fm ShowDialog 观察Show与ShowDialog之间的区别如何在代码中隐藏一个窗体 无模式 窗口 调用Hide方法隐藏 this Hide 隐藏其他窗体可以调用实例名的Hide方法 例如 myForm Hide 窗体隐藏后 其实例仍在 可重新调用Show方法再次显示 32 3 1窗体的创建 显示 隐藏和关闭 如何在代码中关闭一个窗体用法1 fm Close 关闭其他窗体用法2 this Close 关闭当前打开的窗体用法3 Application Exit 不论当前窗体是哪个窗体 只要调用Application的Exit方法 整个应用程序就会立即退出 33 3 2消息框 MessageBox 消息框显示消息对话框可通过检查Show方法返回的值来确定用户单击了哪个按钮注意虽然用Show方法显示消息框 但由于它本身是模式窗口 所以在消息框关闭前 不会执行它后面的代码 34 3 2消息框 MessageBox MessageBox的Show方法提供了多种重载形式 常用有 publicstaticDialogResultShow stringtext publicstaticDialogResultShow stringtext stringcaption MessageBoxButtonsbuttons MessageBoxIconicon 例如 MessageBox Show 输入的内容不正确 消息框关闭后 返回值是DialogResult枚举值之一 枚举值有 None 消息框未返回值 OK Cancel Yes和No 35 3 2消息框 MessageBox Text 在消息框中显示的文本 caption 在消息框的标题栏中显示的文本 buttons MessageBoxButtons枚举值之一 指定在消息框中显示哪些按钮 枚举值有OK OKCancel YesNoCancel和YesNo icon MessageBoxIcon枚举值之一 指定在消息框中显示哪个图标 枚举值有None 不显示图标 Hand 手形 Question 问号 36 1 新建WinForm应用程序 制作如下窗体 4 简单的无纸考试系统 Textbox1Textbox2Textbox3Textbox4Textbox5Textbox6 textBoxTime progressBar1 GroupBox radioButton1 8 ComboBox1 textBoxScore button1 button2 CheckBox1 4 listBox1 37 为了制作方便 这里给出界面上出现的文字 1 NET框架主要由两个部分组成 分别是CLR和2 NET中能实现控件分组的容器控件是PictureBoxToolTipGroupBoxComboBox3 在类的声明中 与类名相同且没有返回值的的方法是构造方法静态方法实例方法虚方法4 可以实现密码输入的文本框属性是5 在 NET平台中 功能相似的类被定义在同一个6 值类型包括简单类型结构类型枚举类型数组类型 4 简单的无纸考试系统 38 制作窗体时需要注意 1 RadioButton 单选按钮 的特点是同组互斥 所以需要利用GroupBox控件对单选按钮进行分组 方法是先拖放GroupBox控件 然后把radioButton拖放到GroupBox内部 在同一个GroupBox内的多个radioButton为一组 2 为了程序易读性 考试用时和最后得分两个文本框使用了有意义的名字 方法是在控件属性窗口中修改控件的Name属性 3 当用户选择一个答案时 在题目前面的文本框中显示用户的选择 4 简单的无纸考试系统 39 2 在Form1的构造方法中设置各控件的初始属性 添加如下代码 listBox1 Items Add Text listBox1 Items Add Enable listBox1 Items Add PasswordChar listBox1 Items Add Visible comboBox1 Items Add CLR comboBox1 Items Add 命名空间 comboBox1 Items Add 文件 comboBox1 Items Add 项目 comboBox1 DropDownStyle ComboBoxStyle DropDownList 4 简单的无纸考试系统 40 3 为textBoxBlank控件增加TextChanged事件privatevoidtextBoxBlank TextChanged objectsender EventArgse textBox1 Text textBoxBlank Text 4 为radioButton1增加CheckedChanged事件privatevoidradioButton1 CheckedChanged objectsender EventArgse if radioButton1 Checked textBox2 Text A 4 简单的无纸考试系统 41 5 以同样方法为radioButton2 4增加事件 可以发现 当控件较多时 且每个控件执行的操作类似 每个操作对应一个方法被调用 使得源代码比较冗长 可以自定义方法 并让多个控件在事件中执行同一个方法 注意 自定义能在事件中执行的方法 方法必须具有特定的签名 6 自定义方法如下 privatevoidradio CheckChanged objectsender EventArgse if radioButton5 Checked textBox3 Text A if radioButton6 Checked textBox3 Text B if radioButton7 Checked textBox3 Text C if radioButton8 Checked textBox3 Text D 4 简单的无纸考试系统 42 7 在Form1的构造方法中添加如下代码 radioButton5 CheckedChanged newEventHandler radio CheckChanged radioButton6 CheckedChanged newEventHandler radio CheckChanged radioButton7 CheckedChanged newEventHandler radio CheckChanged radioButton8 CheckedChanged newEventHandler radio CheckChanged 向事件中添加方法 当该事件发生时 事件中的方法将被执行 在属性窗口通过双击向事件中添加方法后 删除该方法会出现编译错误 原因是系统在From1 Designer cs文件中自动加入了类似上面的代码 同步删除即可 4 简单的无纸考试系统 43 8 自定义方法处理复选框的操作privatevoidCheck CheckChanged objectsender EventArgse strings if checkBox1 Checked s A if checkBox2 Checked s B if checkBox3 Checked s C if checkBox4 Checked s D textBox6 Text s 4 简单的无纸考试系统 44 9 在Form1的构造函数中将自定义方法添加到每个复选框的CheckedChanged事件中 checkBox1 CheckedChanged newEventHandler Check CheckChanged checkBox2 CheckedChanged newEventHandler Check CheckChanged checkBox3 CheckedChanged newEventHandler Check CheckChanged checkBox4 CheckedChanged newEventHandler Check CheckChanged 10 向listBox1的SelectedIndexChanged事件中添加方法 privatevoidlistBox1 SelectedIndexChanged objectsender EventArgse textBox4 Text listBox1 Text 当前选中条目的文本 4 简单的无纸考试系统 45 11 向comboBox1的SelectedIndexChanged事件中添加如下方法 privatevoidcomboBox1 SelectedIndexChanged objectsender EventArgse if comboBox1 SelectedIndex 0 textBox5 Text A if comboBox1 SelectedIndex 1 textBox5 Text B if comboBox1 SelectedIndex 2 textBox5 Text C if comboBox1 SelectedIndex 3 textBox5 Text D 4 简单的无纸考试系统 46 12 处理评分和关闭按钮在 NET中 事件 Event 是一种数据类型 按照事件创建的对象中 保存着一个或多个方法名 当与事件对应的事情发生时 事件中的方法被执行 每个控件都有若干事件对象 向其中添加自定义的方法时 自定义方法必须具有以下原型 签名 void方法名 objectsender EventArgse 控件上的事情 如单击 发生后 相应事件中的方法被运行 称之为 事件被执行 事件被执行时 系统会将发生事情的控件名称复制到sender参数中 所以在自定义方法中可以通过sender判断用户对哪个控件进行了操作 这里使用一个方法处理 评分 和 关闭 两个按钮上的操作 这不是必须的 只是展示事件的概念 4 简单的无纸考试系统 47 12 处理评分和关闭按钮自定义如下方法 privatevoidScoreAndClose objectsender EventArgse Buttonb Button sender if b Text 评分 intscore 0 if textBoxBlank Text 框架类库 textBoxBlank Text FrameworkclassLibrary textBoxBlank Text FCL score 10 if radioButton3 Checked score 10 if radioButton5 Checked score 10 if listBox1 Text PasswordChar score 10 if comboBox1 Text 命名空间 score 10 if textBox6 Text ABC score 10 textBoxScore Text score ToString if b Name button2 this Close Application Exit 4 简单的无纸考试系统 48 注 如果Form1运行在主线程中 关闭Form1即结束整个应用 由于后面制作的登录窗体将成为主线程窗体 所以这里通过Application Exit 来结束应用 当然也可以通过关闭登录窗体来结束应用 不过需要在创建Form1类的实例时 将实例的Owner属性设置为登录窗体 然后在Form1类的代码中通过Owner调用Close来结束整个应用 还有一种情况 就是用户点击右上角的 来关闭Form1 此时 由于登录窗体只是隐藏没有关闭 所以应用程序不能正常退出 可以向Form1的FormClosed事件添加方法 并在该方法中调用Application Exit 来结束应用 有兴趣的同学可以一试 4 简单的无纸考试系统 49 12 处理评分和关闭按钮在Form1的构造函数里 将自定义方法添加到两个按钮的Click事件中 button1 Click newEventHandler ScoreAndClose button2 Click newEventHandler ScoreAndClose 13 处理时钟控件Timer控件自动读取系统时间 能够根据系统时间的变化 以固定的时间间隔反复执行同一个事件 通过Timer控件的Interval属性设置时间间隔 在Timer控件的Tick事件中存放需要反复执行的方法 4 简单的无纸考试系统 50 13 处理时钟控件本例在窗体右上角的textBoxTime控件中显示考试开始后经过的秒数 60秒后结束考试 停止计时 首先在Form1类的开始处声明一个记录秒数的变量 inti seconds 0 然后在Form1的构造函数中设置timer1的事件间隔 timer1 Interval 1000 单位毫秒在Form1的Load事件中加入如下方法 privatevoidForm1 Load objectsender EventArgse Load事件只在窗体第一次显示时执行一次timer1 Start 启动时钟 4 简单的无纸考试系统 51 13 处理时钟控件向timer1控件的Tick事件中添加如下方法 privatevoidtimer1 Tick objectsender EventArgse i seconds if i seconds 60 textBoxTime Text i seconds ToString else timer1 Stop 4 简单的无纸考试系统 52 14 处理进度条进度条的长短取决于控件的maximum和value两个属性 在Form1的构造方法中加入如下代码 progressBar1 Maximum 60 在timer1控件的Tick事件对应的方法中加入代码如下所示 if i seconds 60 textBoxTime Text i seconds ToString progressBar1 Value i seconds 新加代码行 4 简单的无纸考试系统 53 15 新建登录窗体要求用户正确输入用户名和密码后才能进入考试 在项目名称上右键 选择添加 Windows窗体 将新窗体命名为LoginForm 如下所示 4 简单的无纸考试系统 54 15 新建登录窗体在LoginForm的构造方法中输入如下代码 textBox2 PasswordChar this StartPosition FormStartPosition CenterScreen 向 确定 按钮的Click事件中添加如下方法 privatevoidbutton1 Click objectsender EventArgse if textBox1 Text Heb 4 简单的无纸考试系统 55 15 新建登录窗体修改项目的主程序类Program 将启动窗体改为LoginForm staticvoidMain Appl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论