资源预览内容
第1页 / 共95页
第2页 / 共95页
第3页 / 共95页
第4页 / 共95页
第5页 / 共95页
第6页 / 共95页
第7页 / 共95页
第8页 / 共95页
第9页 / 共95页
第10页 / 共95页
亲,该文档总共95页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
应用程序界面设计应用程序界面设计2创建通用过程创建通用过程(1)使用)使用“添加过程添加过程”对话对话 单击单击“工具工具”菜单中的菜单中的“添添加过程加过程”命令,打开命令,打开“添加过添加过程程”对话框。对话框。(2)在代码编辑窗口中输入)在代码编辑窗口中输入Private|Public Static Sub 子过程名(参数表)子过程名(参数表) 语句块语句块 Exit SubEnd Sub说说明明:VB默默认认的的过过程程是是Public,表表示示在在应应用用程程序序中中随随处处都都可可调调用用它它们们;如如用用Private,则则只只有有该过程所在模块中的程序才能调用。该过程所在模块中的程序才能调用。注意函数过程一般应有:注意函数过程一般应有:函数过程名函数过程名=表达式表达式五、变量与过程的作用域五、变量与过程的作用域1变量的作用域变量的作用域 变量的作用域是指变量的作用范围。变量的作用域是指变量的作用范围。 作用范围 局部变量 窗体/模块级变量 全局变量 声明方式声明方式 Dim,Static Dim,Private Public 声明位置声明位置 过程之中过程之中 窗体窗体/模块通用段模块通用段 窗体窗体/模块通用段模块通用段 能否被本窗体能否被本窗体/模模 块其他过程访问块其他过程访问能否被其他能否被其他 模块访问模块访问(1)局部变量:局部变量:在过程内用在过程内用Dim声明的变量,声明的变量,只可本过程用。只可本过程用。(2)窗体窗体/模块级模块级:在窗体:在窗体/模块任何过程外模块任何过程外定义定义,即在即在“通用声明通用声明”段用段用Dim或或Private声明声明,只本窗体或模块中的过程只本窗体或模块中的过程使用。使用。(3)全局级:全局级:在在“通用声明通用声明”段用段用Public语句语句声明的变量,可供该应用程序所有过程声明的变量,可供该应用程序所有过程或函数使用或函数使用。 例如在下面一个窗体或标准模块文件例如在下面一个窗体或标准模块文件中不同级的变量声明:中不同级的变量声明:Public Pa As integerPrivate Mb As string *10 Private Sub F1( ) Dim Fa As integer End Sub Private Sub F2( ) Dim Fb As Single End Sub全局变量全局变量窗体窗体/模块级变量模块级变量局部变量局部变量局部变量局部变量在讲复制、剪切时,为什么将在讲复制、剪切时,为什么将st设为窗体级变量?(见设为窗体级变量?(见P188)2。变量的生存期。变量的生存期 根根据据变变量量在在程程序序运运行行期期间间的的生生命命周周期期,变量可分为动态变量和静态变量变量可分为动态变量和静态变量。动态变量(动态变量(Dynamic) 指指程程序序运运行行到到变变量量所所在在的的过过程程时时,才才分分配配该该变变量量的的内内存存单单元元;退退出出该该过过程程后后,该该单单元元自自动动释释放放,其其值值消消失失。使使用用Dim语语句句在在过过程程中中声声明明的的局部变量属于动态变量。局部变量属于动态变量。静态变量(静态变量(Static)指指程程序序运运行行到到该该变变量量所所在在的的过过程程,退退出出该该过过程程,其其值仍被保留。值仍被保留。 使用使用Static语句在过程中声明的局部变量属于语句在过程中声明的局部变量属于静态变量。静态变量。 例例2(8-6)设计一个模拟幸运数字机游戏。设计一个模拟幸运数字机游戏。设幸运数字为设幸运数字为8,每次由计算机随机产生三,每次由计算机随机产生三个个010之间的随机数,当这三个随机数中之间的随机数,当这三个随机数中有一个数字为有一个数字为8时,就算赢了一次。要求利时,就算赢了一次。要求利用全局变量来累计获胜次数用全局变量来累计获胜次数。 (vb81L8-6)Private Sub Form_Load() RandomizeEnd Sub初始化随机数初始化随机数Public n, wPrivate Sub Command1_Click()Label1.Caption = Int(Rnd * 10) 产生随机数产生随机数Label2.Caption = Int(Rnd * 10) 产生随机数产生随机数Label3.Caption = Int(Rnd * 10) 产生随机数产生随机数 n = n + 1 累计产生随机数的次数累计产生随机数的次数If (Label1.Caption = 8) Or (Label2.Caption = 8) Or (Label3.Caption = 8) Then Beep w = w + 1 使用全局变量使用全局变量,累计获胜的次数累计获胜的次数 Label4.Caption = 共产生了共产生了 & n & 次随机数次随机数,你赢了,你赢了 & Str(w) & 次。次。End IfEnd Sub若若n,w不设为全局变量,不设为全局变量,而是局部变量结果如何而是局部变量结果如何?n与与w始始终为终为1局部变量声明:局部变量声明: Dim声明声明: 随过程的调用而分配存贮单元,随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。自动消失,存贮单元释放。Static声明声明: 每次调用过程,变量保持原来的值。每次调用过程,变量保持原来的值。声明形式:声明形式: Static 变量名变量名 AS 类型类型 Static Function 函数过程名函数过程名(参数列表参数列表) As 类型类型 Static Sub 子过程名子过程名(参数列表参数列表)过程名前加过程名前加Static,表示该过程内的局部变量都是,表示该过程内的局部变量都是静态变量静态变量。例例3 (vb81L2)Private Sub Form_Click() 运行结果:运行结果: Dim i% ,isum% For i = 1 To 5 isum = sum(i) Print isum, Next i End Sub 1 3 6 10 15问:若将问:若将Static j As Integer改改为为 Dim j As Integer ,结果?,结果?1 2 3 4 5Private Function sum(n As Integer) Static j As Integer j = j + n sum = jEnd Function例例4窗体窗体/模块级变量示例。模块级变量示例。Dim x As Integer, y As Integer, z As IntegerPrivate Sub Form_Activate()x = 10: y = 20PrintPrint , x“,y“,z=x+yPrintPrint “调用前值调用前值”, x,y, zPrintCall testPrint “调用后值调用后值”, x,y, zPrintEnd SubPublic Sub test()z = x + yPrint “过程值过程值”, x, y, zPrintEnd Sub程序运行结果程序运行结果 ? x y z=x+y调用前值调用前值 10 20 0过程值过程值 10 20 30调用后值调用后值 10 20 30例例5窗体窗体/模块级变量示例。模块级变量示例。Private Sub Form_Activate()Dim x As Integer, y As Integer, z As Integerx = 10: y = 20PrintPrint , x“,y“,z=x+yPrintPrint “调用前值调用前值”, x,y, zPrintCall testPrint “调用后值调用后值”, x,y, zPrintEnd SubPublic Sub test()z = x + yPrint “过程值过程值”, x, y, zPrintEnd Sub程序运行结果程序运行结果 ? x y z=x+y调用前值调用前值 10 20 0过程值过程值 0 0 0调用后值调用后值 10 20 0传址传址(双向传递):双向传递): 形参得到的是实参的地址,形参得到的是实参的地址,当形参值的改变同时也改变实参的值。当形参值的改变同时也改变实参的值。 默认传址。默认传址。 传值(单向传递)传值(单向传递): 形参得到的是实参的值,形参得到的是实参的值,形参值的改变不会影响实参的值。形参值的改变不会影响实参的值。 使用使用ByVal表示传值。表示传值。三、三、 参参数传递:数传递: 指主调过程的实参传递给被调过程的形参指主调过程的实参传递给被调过程的形参。Sub Swap1(ByVal x%, ByVal y%)Sub Swap1( x%, y%)Public Sub qjc(p, m)例例6. 两个变量的交换两个变量的交换(vb81L6)Sub Swap1(ByVal x%, ByVal y%) t = x : x = y : y = tEnd SubPrivate Sub Command1_Click() a = 10: b = 20: Swap1 a, b 传值传值Print A1=; a, B1=; b a = 10: b = 20: Swap2 a, b 传地址传地址 Print A2=; a, B2=; bnd SubSub Swap2(x%, y%) t = x : x = y : y = tEnd Sub默认为:默认为:Public运行运行结果:结果:A1=10 B1=20A2=20 B2=102过程的作用域过程的作用域 VB中过程的作用域分为模块级和全局级。中过程的作用域分为模块级和全局级。(1)模块级过程)模块级过程 某个模块内定义的过程,其作用域为本模块。某个模块内定义的过程,其作用域为本模块。 定定义义方方法法:在在Sub或或Function前前加加关关键键字字Private,这这样该过程只能被在本模块中定义的过程调用。样该过程只能被在本模块中定义的过程调用。(2)全局级过程)全局级过程 全全局局级级过过程程可可被被整整个个应应用用程程序序(工工程程)所所有有模模块块中定义的过程调用,其作用域为整个应用程序。中定义的过程调用,其作用域为整个应用程序。 定定义义方方法法是是:在在Sub或或Fuction前前加加关关键键字字Public(可以默认)。(可以默认)。 上机作业:上机作业:1. 编程,通过查找子过程查找数组编程,通过查找子过程查找数组a(10)中任中任意元素的位置,若没找到,给出信息。意元素的位置,若没找到,给出信息。a(10)为为2,5,4,8,12,9,1,25,16,3 2。P57 4章章 实验四的实验题目实验四的实验题目3。 P66 5章章 实验一的四、实验题目实验一的四、实验题目4。上册上册 P231 例例7-7 复 习(1)局部变量:局部变量:在过程内用在过程内用Dim声明的变量,声明的变量,只可本过程用;在过程内用只可本过程用;在过程内用Static声明的声明的变量为变量为静态静态局部变量。局部变量。(2)窗体窗体/模块级模块级:在窗体:在窗体/模块任何过程外定模块任何过程外定义义,即在即在“通用声明通用声明”段用段用Dim或或Private声声明明,只本窗体或模块中的过程使用。只本窗体或模块中的过程使用。(3)全局级:全局级:在在“通用声明通用声明”段用段用Public语句语句声明的变量,可供该应用程序所有过程或声明的变量,可供该应用程序所有过程或函数使用函数使用。1。变量分几种?如何定义?其作用范围是。变量分几种?如何定义?其作用范围是什么?什么?2。在下面一个窗体或标准模块文件中不同在下面一个窗体或标准模块文件中不同级的变量声明:级的变量声明:Public Pa As integerPrivate Mb As string *10 Private Sub F1( ) Dim Fa As integer End Sub Private Sub F2( ) Static Fb As Single End Sub全局变量全局变量窗体窗体/模块级变量模块级变量局部变量局部变量静态局部变量静态局部变量8.2 公共对话框公共对话框(CommonDialog)工程工程/部件部件 选定选定 部部件标签件标签选定选定Microsoft CommDialog Control 6.0确定确定1。添加添加公共(通用)对话框公共(通用)对话框到工具箱到工具箱2。打开公共对话框:。打开公共对话框:属性属性(1)Action:打开通用对话框。:打开通用对话框。(2)DialogTiltle:通用对话框标题。(有:通用对话框标题。(有默认,也可自己设默认,也可自己设)。(3)CancelError True:选择:选择“取消取消”按钮,出现错误警告;按钮,出现错误警告; Err.Number置为置为32755(cdCancel)。 False(缺省缺省):选择:选择“取消取消”按钮,没有错误按钮,没有错误警告。警告。 属性:属性:FileName:包含路径包含路径 FileTitle:该属性设计时无效:该属性设计时无效, 返回文件名返回文件名(不包含路径不包含路径) Filter:用于过滤文件类型,格式:用于过滤文件类型,格式:文件说明文件说明|文件类型文件类型 例如:例如: Word文档文档 (*.Doc)|*.DOC | 文本文件文本文件(*.TXT) |*.txt |所有文件所有文件|*.* FilterIndex:文件类型列表框中显示第几组类型文件。从文件类型列表框中显示第几组类型文件。从1开始。开始。 InitDir:指定打开对话框的初始目录,默认当前目录。指定打开对话框的初始目录,默认当前目录。 2. “ 2. “打开打开”文件对话框文件对话框DialogTiltleFileName InitDirFilterFilterIndexDefaultExt例例1(8-9)这是一个使用公共对话框控件的例子这是一个使用公共对话框控件的例子。(vb82l8-9)CommonDialog1.InitDir = c:“CommonDialog1.Filter = all files|*.*|(*.exe)|*.exeCommonDialog1.FilterIndex = 1CommonDialog1.Action = 1Text1.Text = CommonDialog1.FileNameShowOpen用控件数组设用控件数组设置命令按钮置命令按钮Private Sub Command1_Click(Index As Integer)n = IndexSelect Case nCase 0 实现实现打开打开对话框的操作对话框的操作CommonDialog1.Filter = all files|*.*|(*.exe)|*.exeCommonDialog1.FilterIndex = 1CommonDialog1.ShowOpenText1.Text = CommonDialog1.FileNameFrame1.Caption = 从打开对话框返回从打开对话框返回Action = 13. “3. “另存为另存为”对话框对话框 属性属性: 与与“打开打开”对话框类似。对话框类似。 DefaultExt:所存文件的缺省扩展名。所存文件的缺省扩展名。4. “4. “颜色颜色”对话框对话框 属性属性Color: 返回或设置选定的颜色。返回或设置选定的颜色。 例例1中中“颜色颜色”按钮的事件过程按钮的事件过程 如:如: CommonDialog1.ShowColor Text1.ForeColor = CommonDialog1.ColorCase 1 实现实现另存为另存为对话框的操作对话框的操作CommonDialog1.DefaultExt = txtCommonDialog1.Filter = all files|*.*|文本文件文本文件|*.txt|CommonDialog1.FilterIndex = 2CommonDialog1.ShowSaveText1.Text = CommonDialog1.FileNameFrame1.Caption = 从另存为对话框返回从另存为对话框返回Case 2 实现实现颜色颜色对话框的操作对话框的操作CommonDialog1.ShowColorText1.Text = 文本颜色的改变文本颜色的改变Text1.ForeColor = CommonDialog1.ColorFrame1.Caption = 从颜色对话框返回从颜色对话框返回Action = 3 FontName FontBold,FontItalicFontSize FontStrikethruFontUnderline Color5. “5. “字体字体”对话框对话框5. “5. “字体字体”对话框对话框Flags属性:属性:指示所显示的字体类型,指示所显示的字体类型,必须设置必须设置。 cdlCFScreenFonts &H1或或1 屏幕字体屏幕字体 cdlCFPrinterFonts &H2或或2 打印机字体打印机字体 cdlCFBoth &H3或或3 打印机字体和屏幕字体。打印机字体和屏幕字体。 cdlCFEffects &H100或或256 显示删除线和下划线显示删除线和下划线 检查框及颜色组合框检查框及颜色组合框“字体字体.”按钮的事件过程按钮的事件过程CommonDialog1.Flags = cdlCFEffects Or cdlCFBoth或或 CommonDialog1.Flags = 259 3 Or 256 CommonDialog1.Action = 4 Text1.FontName = CommonDialog1.FontName Text1.FontSize = CommonDialog1.FontSizeCase 3 CommonDialog1.Flags = 3 Or 256CommonDialog1.ShowFontWith Text1.FontName = CommonDialog1.FontName.FontSize = CommonDialog1.FontSize.FontStrikethru= CommonDialog1.FontStrikethru.FontBold = CommonDialog1.FontBold.FontItalic = CommonDialog1.FontItalic.FontUnderline= CommonDialog1.FontUnderline.ForeColor = CommonDialog1.ColorEnd WithcdlCFEffects Or cdlCFBoth或或 &H3 Or &H100Action = 36. “6. “打印打印”对话框对话框属性属性: (1) FromPage:起始页号:起始页号(2)ToPage:终止页号:终止页号(3) Copies:打印份数:打印份数 若打印驱动程序不支持多份打印,有可能始终返回若打印驱动程序不支持多份打印,有可能始终返回 1。Private Sub Comprint_Click()CommonDialog1.ShowPrinter 打开打开“打印打印”对话框对话框For i = 1 To CommonDialog1.Copies Printer.Print Text1.Text 打印文本框中的内容打印文本框中的内容Next i Printer.EndDoc 结束文档打印结束文档打印End SubPrivate Sub fileopen_Click()CommonDialog1.Filter = 文本文件文本文件|*.txtCommonDialog1.CancelError = TrueCommonDialog1.ShowOpenText1.Text = Open CommonDialog1.FileName For Input As #1 Do While Not EOF(1) Line Input #1, inputdata Text1.Text = Text1.Text + inputdata + vbcrlf Loop Close #1 Exit Sub打开模块(以后讲供参考)打开模块(以后讲供参考)保存模块(以后讲供参考)保存模块(以后讲供参考)Private Sub filesave_Click()CommonDialog1.Filter = 文本文件文本文件|*.txtCommonDialog1.CancelError = TrueCommonDialog1.ShowSaveOpen CommonDialog1.FileName For Output As #1 Write #1, Text1.TextClose #1End Sub8.3 菜单的设计菜单的设计菜单形式菜单形式: 主菜单名主菜单名快捷键快捷键热键热键子菜单标记子菜单标记主菜单条主菜单条分隔线分隔线菜单项子菜单名子菜单名 菜单是指应用程序中为用户提供的一菜单是指应用程序中为用户提供的一组命令,一般出现在界面顶部。组命令,一般出现在界面顶部。一、菜单编辑器的使用一、菜单编辑器的使用 1。进入菜单编辑器。进入菜单编辑器 “工具工具”菜单菜单“菜单编辑器菜单编辑器”(CTRL+E) 工具栏上的工具栏上的“菜单编辑器菜单编辑器”按钮按钮 菜单列菜单列表框表框菜菜 单单 项项属性属性 操作按钮操作按钮2。常用属性:。常用属性:1. 标题标题(Caption) 热键:前面加热键:前面加&2. 名称名称(Name)框框, 分隔符也应有名称分隔符也应有名称3. 快捷键快捷键(Shortcut) 菜单名没有快捷键菜单名没有快捷键4. 复选复选(Checked)检查框检查框 TRUE 有有 5. 有效有效(Enabled)检查框检查框6. 可见可见(Visible)检查框检查框3。加入分隔线:。加入分隔线:(1)单击)单击“插入插入”按钮,在按钮,在“标标题题”框中键入一个连字符(减号)框中键入一个连字符(减号)“-”; (2)在)在“名称名称”框中输入分隔线的名称框中输入分隔线的名称。4。 添加代码添加代码 菜单中各个菜单项是作为一种特殊的菜单中各个菜单项是作为一种特殊的控件,他们只有一个事件,即鼠标单击控件,他们只有一个事件,即鼠标单击事件(事件(Click)事件。每当单击菜单项时,)事件。每当单击菜单项时,系统就调用该菜单项的事件处理过程,系统就调用该菜单项的事件处理过程,执行为这一过程编写的代码。执行为这一过程编写的代码。 给给 “黑体黑体”菜单项添加代码:菜单项添加代码: Private Sub HeiTi_Click() Text1.Fontname= 黑体黑体 End Sub例例2(8-10). 建立一个有菜单功能的文本编辑建立一个有菜单功能的文本编辑器器。 (vb82l8-10)Private Sub songti_Click() Text1.fontname = 宋体宋体End SubPrivate Sub kaiti_Click()Text1.fontname = 楷体楷体_GB2312End SubPrivate Sub lishu_Click() Text1.fontname = 隶书隶书End Sub二、下拉式二、下拉式 菜单设计菜单设计Private Sub slhz_Click() Text1.fontsize = 16End SubPrivate Sub srhz_Click() Text1.fontsize = 12End SubPrivate Sub cuti_Click() Text1.FontBold = TrueEnd SubPrivate Sub xieti_Click() Text1.FontItalic = TrueEnd Sub三、设计弹出式菜单快捷菜单三、设计弹出式菜单快捷菜单 弹出式菜单(弹出式菜单(Popup Menu)又称快捷)又称快捷菜单。通过单击右键可激活快捷菜单。菜单。通过单击右键可激活快捷菜单。 快捷菜单也是利用菜单编辑器实现,设快捷菜单也是利用菜单编辑器实现,设计时应计时应将它的将它的“可见可见”复选框设为不选中复选框设为不选中,这,这样在满足条件后才弹出,菜单变为可见。样在满足条件后才弹出,菜单变为可见。 弹出快捷菜单的方法是利用弹出快捷菜单的方法是利用Popupmenu方法。方法。 如果一个如果一个File菜单是一个快捷菜单,它菜单是一个快捷菜单,它的的名称为名称为FileMenu,则可在其,则可在其MouseUp(按下按下鼠标)事件鼠标)事件的处理过程添加语句。的处理过程添加语句。添加下列语句添加下列语句 Private sub Form_MouseUp(Button As Integer, Shift As Integer, X as single, Y As single) If Button=2 Then PopupMenu FileMenu End If End SubButton=2表示右表示右击,为击,为1表示左击表示左击 程序运行后,如用鼠标右键在该窗口单程序运行后,如用鼠标右键在该窗口单击,则程序处理该事件,调用击,则程序处理该事件,调用PopupMenu,弹出编辑菜单。弹出编辑菜单。Popupmenu方法的语法如下方法的语法如下: . PopupMenu ,flags,x,y, BoldCommand 必给必给菜单名称菜单名称。 x和和y是窗体上显示菜单的位置。是窗体上显示菜单的位置。 Flags变元定义快捷菜单弹出时的位置和功变元定义快捷菜单弹出时的位置和功能,能, 表表8-10列出列出flags 参数的取值和功能。参数的取值和功能。 指定一个指定一个flags参数,可从每组中选取一个参数,可从每组中选取一个常数,用逻辑常数,用逻辑“或或”组合。组合。 要加粗的子菜单名要加粗的子菜单名例例 题题 例例3(8-11)修改例修改例2,将,将“格式格式”作为子弹出菜单作为子弹出菜单使菜单以使菜单以x为中心,且左、右键单击时都可为中心,且左、右键单击时都可触发子菜单项。触发子菜单项。 (vb82L8-11)对文本框操作才对文本框操作才需要加这两句需要加这两句Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Text1.Enabled = False 撤消系统默认弹出菜单撤消系统默认弹出菜单Text1.Enabled = True 使使Text1可用可用If Button = 2 Then PopupMenu gs, 4 Or 2 End IfEnd Sub上机作业上机作业: 1。建立一个文本框和如图命令按钮,。建立一个文本框和如图命令按钮,“打开打开”可在文本框显示打开的文件名,可在文本框显示打开的文件名,“颜色颜色”可设置可设置文本框背景色,文本框背景色,“字体字体”可设文本框的字体、字可设文本框的字体、字号、颜色、删除线、下划线号、颜色、删除线、下划线也可建立两个菜单:也可建立两个菜单:文件文件- 打开打开 退出退出格式格式- 颜色颜色 字体字体l2。 P71 四、实验题目四、实验题目l3。 P76 四、实验题目四、实验题目复 习1. 添加一个文件菜单和打开、退出子添加一个文件菜单和打开、退出子菜单中间加分隔线菜单中间加分隔线2,将,将“Edit”作为弹出菜单,在文本框上,单作为弹出菜单,在文本框上,单击鼠标右键时可弹出快捷菜单,代码如何写。击鼠标右键时可弹出快捷菜单,代码如何写。Private Sub Text1_MouseDown()Text1.Enabled = False 撤消系统默认弹出菜单撤消系统默认弹出菜单Text1.Enabled = True 使使Text1可用可用If Button = 2 Then PopupMenu Edit End IfEnd Sub将将Edit的可见属性社为假的可见属性社为假8.4 多文档界面多文档界面一、界面样式一、界面样式 WindowsWindows应用程序的用户界面主要有应用程序的用户界面主要有两种:两种:一种是单文档界面一种是单文档界面(SDI(SDI),),另一种是多另一种是多文档界面文档界面(MDI(MDI),也称为多重窗体。,也称为多重窗体。 Windows Windows中的记事本就属于中的记事本就属于SDISDI。 Word Word是一个是一个MDIMDI界面,允许同时打开多界面,允许同时打开多个文档。个文档。 多文档界面是把若干窗体多文档界面是把若干窗体“封装封装”在在一个窗体中,即:用一个窗体来操作其它窗一个窗体中,即:用一个窗体来操作其它窗体。可操作其它窗体的体。可操作其它窗体的称为父窗体称为父窗体,其它被,其它被装入的称为装入的称为子窗体子窗体。二、多文档界面中窗体之间的关系二、多文档界面中窗体之间的关系1.1.父窗体与子窗体的关系父窗体与子窗体的关系 在在MDIMDI应用程序中,父窗体只能有应用程序中,父窗体只能有一个,而子窗体则可有多个。父窗体主一个,而子窗体则可有多个。父窗体主要用于显示或排列子窗体。父窗体关闭要用于显示或排列子窗体。父窗体关闭时,子窗体也随之关闭。时,子窗体也随之关闭。 子窗体在父窗体中按三种方式排列:子窗体在父窗体中按三种方式排列:层叠、水平平铺、垂直平铺层叠、水平平铺、垂直平铺。2.2.子窗体与子窗体的关系子窗体与子窗体的关系 子窗体间是相互独立的,但它们可以子窗体间是相互独立的,但它们可以调用共享的模块,也可以交换数据。调用共享的模块,也可以交换数据。 一般是当前活动窗体排在最前面一般是当前活动窗体排在最前面。三、创建三、创建MDIMDI应用程序的方法与步骤应用程序的方法与步骤 1 1、使用、使用“应用程序向导应用程序向导”生成生成MDIMDI(1 1)选择)选择“文件文件”菜单下的菜单下的“新建工程新建工程”命令。命令。(2 2)在)在“新建工程新建工程”的对话框中选择的对话框中选择“VBVB应用程序向导应用程序向导”。(3 3) 进入进入“VB“VB应用程序向导应用程序向导”后,在选后,在选择界面类型时,选择择界面类型时,选择“多文档界面多文档界面(MDIMDI)”。单击。单击“下一步下一步”或或“完成完成”按钮。按钮。2 2使用使用“菜单和属性窗口菜单和属性窗口”生成生成MDIMDI(1 1)选)选“文件文件”下的下的“新建工程新建工程”,开始,开始一新工程。一新工程。(2 2)选)选“工程工程”上的上的“添加添加MDIMDI窗体窗体”,加一加一MDIMDI窗体。窗体。(3 3)选)选“工程工程”菜单的菜单的“添加窗体添加窗体”,添,添加一窗体。加一窗体。 (4 4)打开属性窗口,把)打开属性窗口,把添加窗体的添加窗体的MDIChildMDIChild的属性设为的属性设为TrueTrue即可。即可。3. MDI3. MDI窗体窗体( (父窗体)与子窗体的交互父窗体)与子窗体的交互 * (1)活动子窗体和活动控件活动子窗体和活动控件 MDI窗体的两个属性:窗体的两个属性: ActiveForm 和和ActiveControl 分别表示:分别表示:活动窗体和活动窗体上有焦点的控件活动窗体和活动窗体上有焦点的控件 将子窗体的文本框中所选文本复制到剪贴板上:将子窗体的文本框中所选文本复制到剪贴板上: ClipBoard.SetText frmMDI.ActiveForm. _ ActiveControl.SelText 将剪贴板上文本粘贴到子窗体的文本框中将剪贴板上文本粘贴到子窗体的文本框中: frmMDI.ActiveForm.ActiveControl.SelText= _ ClipBoard.GetText 问问:如何把文本框选中的文本复制:如何把文本框选中的文本复制/ 剪切到剪切板剪切到剪切板?ClipBoard.SetText Text1.SelText, Text1.SelText=(2)显示显示MDI窗体及其子窗体窗体及其子窗体 显示窗体的方法为显示窗体的方法为Show,有关规则:有关规则: 1)加载子窗体时,其父窗体会自动加载并显加载子窗体时,其父窗体会自动加载并显示示;反之则无。应把子窗体作为启动窗体。;反之则无。应把子窗体作为启动窗体。 设置启动窗体:设置启动窗体: “工程工程/工程属性工程属性/启动对象启动对象”选启动窗体名选启动窗体名 2)MDI窗体有窗体有AutoShowChildren属性,决属性,决定是否自动显示改变了属性(如:定是否自动显示改变了属性(如:Caption)的的子窗体子窗体.(3 3)多文档界面应用程序中的)多文档界面应用程序中的“窗口窗口”菜单菜单 1)显示打开的多个文档窗口显示打开的多个文档窗口 要在父窗体某菜单上显示打开的子窗体标题,只需要在父窗体某菜单上显示打开的子窗体标题,只需用菜单编辑器将该菜单的用菜单编辑器将该菜单的WindowList属性设为属性设为True。 2)排列窗口排列窗口 利用利用Arrange方法进行层叠、平铺和排列图标。方法进行层叠、平铺和排列图标。 形式:形式: MDI窗体对象窗体对象.Arrange 排列方式排列方式 排列方式排列方式例例1(8-12) MDI1(8-12) MDI窗体的创建与操作窗体的创建与操作 建立一个父窗体,两个子窗体建立一个父窗体,两个子窗体, ,使之能使之能分别层叠、水平平铺和垂直平铺。分别层叠、水平平铺和垂直平铺。(1 1)建名为)建名为MDIForm1MDIForm1的父窗体的父窗体( (启动窗体启动窗体) )(2 2)建立两个子窗体,)建立两个子窗体,CaptionCaption属性分别为属性分别为Form1Form1、FormMDIChild FormMDIChild 。(3 3)将)将FormMDIChildFormMDIChild窗体的窗体的MDIChildMDIChild属性属性设为设为TrueTrue。(4 4)在父窗体中加入菜单,其)在父窗体中加入菜单,其“窗口窗口”菜菜单下分别为层叠、水平平铺和垂直平铺子单下分别为层叠、水平平铺和垂直平铺子菜单。菜单。 (Vb83L8-12)(Vb83L8-12)(5 5)程序代码:)程序代码: 新建窗体代码新建窗体代码Public Sub FileNewProc() Dim NewDoc As New FormMDIChild Static No As Integer No = No + 1 NewDoc.Caption = “文档 & No NewDoc.Show 显示子窗体 End SubPrivate Sub new_Click()Private Sub new_Click()Private Sub new_Click() FileNewProc FileNewProcEnd SubEnd Sub必为已有必为已有的窗体名的窗体名排列窗口代码:Private Sub cd_Click()Private Sub cd_Click() 参数参数 0 0代表子窗体间层叠代表子窗体间层叠 MDIForm1.Arrange 0 MDIForm1.Arrange 0End SubEnd SubPrivate Sub sppp_Click()Private Sub sppp_Click() 参数参数 1 1代表子窗体间水平平铺代表子窗体间水平平铺 MDIForm1.Arrange 1 MDIForm1.Arrange 1End SubEnd SubPrivate Sub czpp_Click()Private Sub czpp_Click() 参数参数 2 2代表子窗体间垂直平铺代表子窗体间垂直平铺 MDIForm1.Arrange 2 MDIForm1.Arrange 2End SubEnd Sub8.5 工具栏工具栏 一、一、 工具栏的常用属性、方法和事件工具栏的常用属性、方法和事件 ToolBar控件是控件是ActiveX控件的一部分。控件的一部分。 ToolBar控件包含一个按钮对象集合,用来控件包含一个按钮对象集合,用来创建工具栏。可在按钮上用创建工具栏。可在按钮上用Image属性为按钮属性为按钮载入一个图标,用载入一个图标,用Caption属性显示标题。属性显示标题。 ToolBar属高级控件,先要将其加到工具箱。属高级控件,先要将其加到工具箱。(一)方法:(一)方法:1.单击单击“工程工程”的的“部件部件”菜单项;菜单项; 2. 再单击再单击“Microsoft Windows Common Controls 6.0”左边的复选框;左边的复选框; 3. 最后单击最后单击“确定确定”。 (二)工具栏控件的常用属性(二)工具栏控件的常用属性 *1. Buttons属性属性 访问工具栏中使用的访问工具栏中使用的Buttons对象的集合。对象的集合。*2. ImageList属性属性 读出和设置与工具栏相关联的读出和设置与工具栏相关联的ImageList控件。该属性被设置后,可以向工具栏按控件。该属性被设置后,可以向工具栏按钮中添加图形。钮中添加图形。3. Index属性属性控件名相同时,用来产生一个数组中的索控件名相同时,用来产生一个数组中的索引用来标识各控件。引用来标识各控件。*4. ToolTipText属性属性 设置程序运行时鼠标指在工具栏的某一设置程序运行时鼠标指在工具栏的某一按钮上所显示的提示文本。按钮上所显示的提示文本。5. ShowTips属性属性 设置是否显示工具栏按钮上的提示文本设置是否显示工具栏按钮上的提示文本.*6 . Key属性属性 设置某一按钮与其他按钮相区别的关键字设置某一按钮与其他按钮相区别的关键字7 . Style属性属性 设置按钮的工作样式,有设置按钮的工作样式,有5个值,缺省为个值,缺省为0。*8 . Image属性属性 该属性设置按钮中显示的图形,以该属性设置按钮中显示的图形,以1,2,3.等等ImageList中各图形的索引值中各图形的索引值来标识。来标识。(三)工具栏常用事件有:(三)工具栏常用事件有: (1) ButtonClick事件事件当单击工当单击工具栏上的任一个按钮执行事件过程;具栏上的任一个按钮执行事件过程; (2)Click事件事件当单击工具栏空白当单击工具栏空白处时执行事件过程。处时执行事件过程。二、二、 创建工具栏创建工具栏 将将ImageList控件添加到窗体之后,控件添加到窗体之后,ToolBar控件才可使用其中的图标。控件才可使用其中的图标。 每个每个ListImage对象可用集合的索引或对象可用集合的索引或关键字的属性值加以引用。关键字的属性值加以引用。 创建工具栏步骤:创建工具栏步骤: 第一步第一步 : 将将toolbar工具栏和工具栏和ImageList加加入工具箱中;入工具箱中; 第二步第二步 : 分别加入分别加入toolbar工具栏和工具栏和ImageList图象表到窗体中;图象表到窗体中;第三步第三步 : 加入图象到加入图象到ImageList图象列表中图象列表中: 1. 选图象列表的选图象列表的“自定义自定义”属性。属性。 2. 单击单击“属性页”对话框中的“图象图象”选项卡选项卡,然后单击单击“插入图片插入图片”按钮按钮。 C:program filessunvicobmp 3 .选中图形文件后,单击选中图形文件后,单击“打开打开”,将其加到图像框中。可 依次选多个。 4. 单击“关键字”框,为每个图标输入关键为每个图标输入关键字字;关键字应唯一。 第四步:设置工具栏属性第四步:设置工具栏属性: 1.用属性窗口的用属性窗口的“自定义自定义”选项,或右击工具栏对象,选项,或右击工具栏对象,选择选择“属性属性”项。项。 2 . 单击单击“通用通用”按钮,按钮, 从从“图象列表图象列表”框中选择加入框中选择加入的的ImageList控件名。控件名。 3.单击单击“按钮按钮”选项卡,点击选项卡,点击“插入按钮插入按钮”, “索引索引”框框中数字自动变为中数字自动变为1, 可设属性(由灰变黑)。可设属性(由灰变黑)。 4 . 单击单击“图象图象”文本框,输入文本框,输入ListImage中图标或位中图标或位图的索引值(图的索引值(1,2,3等)或关键字。等)或关键字。 还可设置按钮标题、标记,工具提示文本等。还可设置按钮标题、标记,工具提示文本等。 5. 单击单击“应用应用”按钮,设置完毕。按钮,设置完毕。 6. 重复重复35,设置多个按钮后单击,设置多个按钮后单击“确定确定”。例题: 建立一个有建立一个有“复制复制”、“剪切剪切”、“粘粘贴贴”按钮的工具栏。按钮的工具栏。 各按钮的索引值和关键字的值为:各按钮的索引值和关键字的值为: 剪切剪切1,key1 复制复制2,key2 粘贴粘贴3,key3 三、三、 为工具栏的各按钮编写处理过程为工具栏的各按钮编写处理过程 运行程序时工具栏出现在窗体上,运行程序时工具栏出现在窗体上,此时单击各按钮,不能完成任何功此时单击各按钮,不能完成任何功能,因没编代码。能,因没编代码。 单击工具栏按钮时,产生单击工具栏按钮时,产生Buttonclick事件。事件。 编写代码时可用按钮的编写代码时可用按钮的Index属属性或性或key属性标识被单击的按钮,因属性标识被单击的按钮,因它们是唯一的。它们是唯一的。编写的代码如下:Dim vbTemp As String 定义vbtemp为全局变量Private Sub Toolbar1_ButtonClick ( ByVal Button As ComctlLib. Button)Select Case Button. Key (或或Button . index)Case cut (或或 1) vbTemp = Text1.Text Text1.Text = Case copy vbTemp = Text1.TextCase paster Text2.Text = vbTemp.End SelectEnd Sub 注意:注意:每个工具栏中的按钮不是一个每个工具栏中的按钮不是一个独立的控件,它必须通过单击工具栏事独立的控件,它必须通过单击工具栏事件后,判断各按钮的索引值或关键字的件后,判断各按钮的索引值或关键字的值,来确定各自要实现的功能。值,来确定各自要实现的功能。(VB6GJLLT(例题)上机操作题:P264 7,8, 9,10 10题:将自己的作业编到一作业管理系统中。 单击“开始”按钮,调出各章作业选项列表(用列表框做) 单击某一列表选项,显示本章作业列表,选择某项后,运行该作业。 注意:(1)各作业的窗体名称不能相同。如都用form1。 (2) 先编主窗体,包括“开始”按钮和各列表框。 (3)用“工程”- “添加文件”-选作业窗体文件(窗体名称已改),加到工程中。 (4)编写代码。 (5) 用“文件”菜单的“生成xxx.exe”命令,生成可执行文件.上机操作题4. 设计一个菜单,通过菜单命令可以改变窗体的背景颜色、字体颜色、字体的尺寸,并且当窗口的文本框中无字符时,字体颜色和尺寸的设置无效。 7. 创建一个带有图标的工具栏,工具栏中有“新建”、“打开”、“保存”、“剪切”、“复制”、“|粘贴”等按钮。9. 设计一个界面,要求界面中带有菜单和工具栏,并可通过菜单或工具栏完成简单的文本编辑功能。复复 习习 简述建立工具栏的基本步骤?简述建立工具栏的基本步骤?工具栏的主要事件为何?通常用哪个工具栏的主要事件为何?通常用哪个语句和按钮的哪个属性写工具栏的代语句和按钮的哪个属性写工具栏的代码码?复习 通过通过ToolBar、ImageList组合使用建立工组合使用建立工具栏,步骤:具栏,步骤:1.利用利用“Microsoft Windows Common Controls 6.0”将控件添加到工具箱将控件添加到工具箱 2. 在在ImageList控件中添加所需的图象控件中添加所需的图象 3. 在在ToolBar控件中创建控件中创建Button对象。对象。 4. 在在ButtonClick事件中用事件中用Select Case语句对各按钮语句对各按钮进行编程。进行编程。一、一、 键盘事件键盘事件 1。KeyPress事件过程事件过程: 按下并释放一个会产生按下并释放一个会产生Ascii码的码的键时触发键时触发事件语法格式:事件语法格式: Sub object_KeyPress(index As Integer,KeyAscii As Integer) 响应事件的程序代码块响应事件的程序代码块End SubKeyAscii是按键所对应的是按键所对应的Ascii码值码值,如如B-66. 8.6 界面上的用户事件界面上的用户事件 Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 按下回车键按下回车键 MsgBox 您按下了回车键!您按下了回车键! End IfEnd Sub2。KeyDown与与 KeyUp事件过程事件过程:KeyDown:按下任意一键时触发按下任意一键时触发Sub object_KeyDown(index As Integer, keycode As Integer, shift As Integer) 响应事件的程序代码块响应事件的程序代码块End SubEnd Sub 当焦点在某一对象上,按下任意一键时,当焦点在某一对象上,按下任意一键时,会引发该对象的会引发该对象的KeyDown事件事件Sub object_KeyUp(index As Integer, keycode As Integer, shift As Integer) 响应事件的程序代码块响应事件的程序代码块End SubEnd Sub 当焦点在某一对象上,释放任意一键时,当焦点在某一对象上,释放任意一键时,会引发该对象的会引发该对象的KeyDown事件事件 KeyUp事件过程:事件过程:释放任意一键时触发释放任意一键时触发参数说明参数说明: (1)index:该参数是控件数组的下标。:该参数是控件数组的下标。 (2)KeyCode:键盘扫描码:键盘扫描码,告诉事件过程告诉事件过程用户按的物理键(按键的实际码)。该码以用户按的物理键(按键的实际码)。该码以键为准,而不是以字符为准。也就是说,大键为准,而不是以字符为准。也就是说,大写字母与小写字母使用同一个键,它们的写字母与小写字母使用同一个键,它们的KeyCode相同相同 (使用大写字母的(使用大写字母的Ascii码)。码)。(3) Shift(3) Shift参数参数包含了按下包含了按下Shift键、键、Ctrl键、键、Alt键的状态信键的状态信息息; 按键按键 参数值参数值 Shift 1 Ctrl 2 Alt 4 如果如果Shift的值为的值为4,表示按下了,表示按下了Alt键键 。 注意:注意: Shift的返回值为一个总和结果的返回值为一个总和结果,若同若同时按了时按了Ctrl和和Shift键,则键,则Shift的返回值为的返回值为3; 表示按住表示按住Ctrl健,再单击鼠标左键后执行的代码健,再单击鼠标左键后执行的代码END。问:问:若同时按按了若同时按按了Shif、 Ctrl和和Alt键,则键,则Shift返返回值为多少?回值为多少? Shift值的最大值为多少?值的最大值为多少?均为均为7例如:例如: If Shift = 2 and Button = 1 Then end 3。KeyPreview(预检)(预检)属性属性 窗体的窗体的KeyPreview(预检)(预检)属性设置为属性设置为True,才才能使用窗体的能使用窗体的KeyDown、KeyUp、KeyPress事件事件,否否则控件的则控件的窗体的窗体的这这3个事件不起作用,只个事件不起作用,只活动控件的活动控件的这这3个事件起作用个事件起作用。 按下按下Alt键时,键时,Shift的值为的值为4例例1 编一程序,当按下编一程序,当按下Alt+F5时终止程序的运行。时终止程序的运行。 先把窗体的先把窗体的KeyPreview属性设置为属性设置为True,再编写,再编写如下的程序:如下的程序:Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If (KeyCode = vbKeyF5) And (Shift = 4) ThenEnd End If End Sub 4.应用应用 限制数据输入限制数据输入 限制文本框只能接收限制文本框只能接收“0”“9”的数字字符。的数字字符。(0的的 KeyAscii为为48)Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then KeyAscii = 0 为为0 表示不接受任何字符表示不接受任何字符 End IfEnd Sub(1)(1)MouseDownMouseDown事件:按下鼠标时触发事件:按下鼠标时触发Sub Form_MouseDown(Button As Integer, Sub Form_MouseDown(Button As Integer, Shift As Integer,X As Single, Y As Single)Shift As Integer,X As Single, Y As Single)(发生在窗体的事件过程)(发生在窗体的事件过程)(2)(2)MouseUpMouseUp事件:鼠标按钮释放时触发事件:鼠标按钮释放时触发Sub Form_MouseUpSub Form_MouseUp(Button As Integer,Shift As (Button As Integer,Shift As Integer,Integer, X As Single,Y As Single)X As Single,Y As Single) ( (发生在窗体上的事件过程发生在窗体上的事件过程) )(3)(3)MouseMoveMouseMove事件:移动鼠标时触发事件:移动鼠标时触发Sub Form_MouseMoveSub Form_MouseMove(Button As Integer, Shift As (Button As Integer, Shift As Integer,X As Single,Y As Single)Integer,X As Single,Y As Single) ( (发生在窗体上的事件过程发生在窗体上的事件过程) )二、二、 鼠标器事件鼠标器事件注意鼠标事件发生在什么对象上,是窗体还是控件。注意鼠标事件发生在什么对象上,是窗体还是控件。(1) Button(1) Button参数参数 Button参数指示哪个按钮触发了鼠标事件:参数指示哪个按钮触发了鼠标事件:1vbLeftButton:按下左键触发了鼠标事件;按下左键触发了鼠标事件;2vbRightButton:按下右键触发了鼠标事件;按下右键触发了鼠标事件;4vbMiddleButton:按下中键触发了鼠标事件按下中键触发了鼠标事件 例如:例如:Button为为2,表示按下了右键;表示按下了右键;如果按了左键如果按了左键, Button为为 1 If Button = 1 Then 或或 If Button = vbLeftButton Then 这是按了左健后执行的代码这是按了左健后执行的代码 Endif (2) Shift(2) Shift参数参数Shift与键盘事件过程与键盘事件过程Shift相同相同 (3) x,y:鼠标的当前位置:鼠标的当前位置例例2 (8-15)屏幕可显示鼠标器指针所指的位置屏幕可显示鼠标器指针所指的位置, ,并单击鼠标左键时可在指针当前位置画一并单击鼠标左键时可在指针当前位置画一个圆;按个圆;按ShiftShift同时按鼠标右键时可在指针同时按鼠标右键时可在指针当前位置画一个圆点。当前位置画一个圆点。(vb84L8-15)(vb84L8-15)画一个圆画一个圆Circle (X, Y), 400控制点的大小控制点的大小Form1.DrawWidth = 15 画一红色点画一红色点PSet (X, Y), vbRed Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Text1.Text = X Text2.Text = YEnd SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Circle (X, Y), 400 End If If Shift = 1 And Button = 2 Then Form1.DrawWidth = 15 控制点的大小控制点的大小 PSet (X, Y), vbRed 画一红色点画一红色点 End If End SubPrivate Sub Form_Load()Combo1.Text = Text1.FontSizeEnd SubPrivate Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text1.FontSize = Combo1.Text End IfEnd SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Text1.FontSize = Combo1.TextEnd Sub 此例类似工具栏上字号设置。此例类似工具栏上字号设置。例例3(加)(加)将文本框文字字号将文本框文字字号由组合框文本设置(由组合框文本设置(vb84Lj)三、 鼠标光标的形状 在在VB中中,可可以以通通过过属属性性来来设设置置鼠鼠标标光光标标的形状。其语法格式如下:的形状。其语法格式如下: MousePointer=属性值属性值 该该属属性性既既可可以以在在属属性性窗窗口口中中设设置置,也也可可以在程序代码中设置。以在程序代码中设置。 属性值是一整数,其取值见表属性值是一整数,其取值见表8-17 。VB常数常数 MousePointer属性值属性值 鼠标光标形状鼠标光标形状VbDefault 0 确定的默认形状确定的默认形状VbArrow 1 箭头箭头VbCrosshair 2 十字形状十字形状VbIbeam 3 I形形 将将对象对象从一地拖到另一地。从一地拖到另一地。 (1) DragMode属性属性0:(缺省缺省)(Manual)手工拖动模式;手工拖动模式; 1: (Automatic)自动拖动模式)自动拖动模式 ;(2) Drag方法方法四、鼠标四、鼠标拖放(拖放(Drag and Drop)Drag and Drop) 当当DragMode为为0(手动方式)时,需用手动方式)时,需用 Drag方法启动拖放:方法启动拖放: 控件名称控件名称.Drag 参数参数 0:取消拖放操作:取消拖放操作 1(省略省略):开始拖放操作:开始拖放操作; 如如:picture1.Drag 1例例4.4.拖放应用示例拖放应用示例(vb84L8-16) 将将Picturel.DragMode设置为设置为1(Automatic) Private Sub Form_DragDrop(Source As Control, X As Sin) Picture1.Move (X - Picture1.Width / 2), (Y - Picture1.Height / 2) Picture1.Move X, Y End SubPrivate Sub Label1_DragOver(Source As Control, X As Sin) Picture1.Drag 0End Sub (3)DragDrop (拖放拖放)事件事件注意:注意:一般控件的拖放在窗体一般控件的拖放在窗体上进行上进行,不能拖放到其他控件内不能拖放到其他控件内(4) DragIcon属性:属性: 拖动过程中显示的图标拖动过程中显示的图标(Ico或或Cur文件文件)。 Label11.DragIcon=LoadPicture (C:IconsMail.ico) Mail.ico文件作为拖动标签文件作为拖动标签1时显示的图标。时显示的图标。 也可在属性窗口设置对象的也可在属性窗口设置对象的 DragIcon属性属性(在(在c:windowsucdosico中有很多中有很多.ico)例例5 5(8-178-17)拖放应拖放应用示例用示例 (vb84L8-17)Private Sub Image1_MouseDown(Button As Int) If Button = 1 Then Image1.DragIcon = Image1.Picture Image1必为图标图形必为图标图形 Image1.Drag 1End IfEnd SubPrivate Sub Picture1_DragDrop(Source As Co ) If TypeOf Source Is Image Then Picture1.Picture = Source.Picture Source.Picture=false Else MsgBox (Erron) End IfEnd Sub用用TypeOf判断对象的判断对象的控件类型控件类型 五、五、OLE OLE 拖放拖放 将将数据数据从一控件或应用程序拖到另一控从一控件或应用程序拖到另一控件或应用程序。件或应用程序。例例6(加)(加)将两文本框中内容相互拖放,也可拖将两文本框中内容相互拖放,也可拖放到放到WordWord或写字板中或写字板中。(vb84L17j)(vb84L17j) OLEDragMode属性设属性设1 1; OLEDropMode属性设属性设2 2。(1) OLEDragMode属性属性(源控件设置源控件设置) 0-Manual:缺省,手工:缺省,手工 1-Automatic:自动:自动 (2) OLEDropMode属性属性(目标控件设置目标控件设置) 0-None:缺省,目标控件不接受:缺省,目标控件不接受“放放” 1-Manual:手工实现:手工实现“放放”操作。操作。 2-Automatic:自动实现:自动实现“放放”按按Ctrl同时同时拖可复制拖可复制 (3)支持支持OLE不同拖放操作的控件不同拖放操作的控件 a. 完全支持自动完全支持自动OLE拖放的控件拖放的控件:可全设自动可全设自动 PictureBox Image TextBox。 b. 支持自动支持自动“拖拖”操作,不支持自动操作,不支持自动“放放”: ListBox、 ComboBox、 FileListBox、DirListBox 拖可设自动,放不能自动可编程进行放。拖可设自动,放不能自动可编程进行放。 c. 只支持手动只支持手动“放放”操作的控件有操作的控件有 没有没有OLEDragMode属性,只有属性,只有OLEDropMode属性,属性,但不能自动):但不能自动):一般不做源,可做目标。一般不做源,可做目标。 CommandButton 、 Label、 OptionButton、 CheckBox、 Frame、 DriveListBox例例6 (8-18) 从从Win资源管理器把文件的文件名拖到标签上资源管理器把文件的文件名拖到标签上 Sub Label1_OLEDragDrop(Data As DataObject, Effect As ) Label1.Caption = Data.Files(1)End Sub 在资源管理器中选定文件且拖出时,系统把所选在资源管理器中选定文件且拖出时,系统把所选文件名保存在文件名保存在Data对象的对象的Files属性中,属性中,Files属性实属性实质是一个数组。质是一个数组。 Label1.Caption = Data.Files(1)语句将保存的第语句将保存的第一个文件名显示在标签中。一个文件名显示在标签中。OLEDropMode为为1(Manual)标签的放属性设为标签的放属性设为1(只有手工放)(只有手工放)(vb84L8-18)上机作业上机作业1.P37 1.P37 实验六实验六 二、实验范例二、实验范例2.2.上册,上册,P299 P299 例例8-158-15。增加增加窗体显示鼠标所指位置窗体显示鼠标所指位置。3 3。窗体上有两个文本框,一个标签,一个图象框,窗体上有两个文本框,一个标签,一个图象框,一个图片框。(提示见问题后页号)一个图片框。(提示见问题后页号)(1) (1) 使文本框中的内容可互相拖动,也可与使文本框中的内容可互相拖动,也可与WordWord、写、写字板等互相拖动。字板等互相拖动。(p305,(p305,最后一行)最后一行)(2 2)图象框与图片框的图可以相互拖动。)图象框与图片框的图可以相互拖动。(3 3)可将文本框)可将文本框1 1中的内容拖动到标签中。中的内容拖动到标签中。(P307)(P307)(4 4)图象框与图片框可在窗体上随意移动。)图象框与图片框可在窗体上随意移动。(P302)(P302)结束语结束语谢谢大家聆听!谢谢大家聆听!95
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号