vb-08过程.ppt_第1页
vb-08过程.ppt_第2页
vb-08过程.ppt_第3页
vb-08过程.ppt_第4页
vb-08过程.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第8章过程 第八次课 上次课程回顾 7 1数组的基本概念数组的声明静态数组的声明动态数组的声明用OptionBase语句设定下界的默认值7 2数组的基本操作数组的输入数组的输出数组的复制数组的删除 7 3控件数组建立控件数组使用控件数组7 4记录 本章内容 8 1Sub过程建立Sub过程调用Sub过程8 2Function过程建立Function过程调用Function过程8 3参数传递形参与实参引用与传值数组参数的传送数组的删除 8 4对象参数8 6键盘事件过程8 7鼠标事件过程8 8拖放 VB程序代码的结构化组织 VB的程序代码部分是由若干被称为 过程 的代码行以及向系统提供某些信息的说明组成 其中有针对于某个对象的事件过程 也有用户自定义过程 而这些过程及说明又被组织在不同的 模块 文件之中 第八章过程 在用VB设计应用程序时 除了声明常量和变量外 全部工作就是编写过程 VB中的过程可以看作是构成程序的功能模块 过程 事件过程 通用过程 子程序过程 函数过程 SUB过程 Function过程 8 1Sub过程 1 定义Sub过程过程的格式如下 Static Private Public Sub过程名 参数表列 语句块 ExitSub 语句块 EndSub 说明 过程是以Sub开头 以EndSub结束的一段程序 在这两句之间是语句块 称为 过程体 或 子程序体 Static 可选的 表示在调用之间保留Sub过程的局部变量的值 即此过程中的局部变量为静态的 Static属性对在Sub外声明的变量不会产生影响 即使过程中也使用了这些变量 Private 可选的 表示Sub过程是私有的 只能被本模块中的其他过程访问 不能被其他模块中的过程访问 Public 可选的 表示Sub过程是公有过程 可以在程序的任何地方调用它 各窗体通用的过程一般在标准模块中用Public定义 在窗体层使用Public定义的通用过程通常在本窗体模块中使用 在其它窗体模块中使用时应该加上窗体名称作为前缀 过程名 必需的 Sub的名称 遵循标准的变量命名约定 在同一个模块中 同一个变量名不能既用作Sub过程名又用作Function过程名 参数表列 由多个参数组成 参数之间用逗号分隔 这里的参数通常称为形式参数 当过程被调用时 调用过程的命令将数据传送给这里的参数 参数格式如下 参数格式 ByVal ByRef 变量名 Astype ByVal ByRef 值传递 地址传递 且默认地址传递 变量名 合法的变量名或数组名 如为数组应有一对括号 Astype 声明参数的数据类型 缺省时为变体类型 值传递是调用过程时实际参数的值传给形式参数 地址传递是调用过程时将实际参数的内存存放地址传过来 形式参数也指向同一地址 ExitSub 在运行时 运行到此命令时 程序返回调用此过程的下一条命令执行 EndSub 表示过程结束 过程定义不可以嵌套 也就是说 在过程内 不能定义Sub过程或Function过程 也不能使用GoTo语句进入Sub过程 过程只能通过调用来执行 在过程程序的内部还可以调用其它过程 即可以嵌套调用 举例 下面是一个例子 当使用不同的参数值调用此过程 会出现不同的消息框 PrivateSubmsg aAsInteger sname 超越系统 SelectCaseaCase1MsgBox 数据错误 请注意 vbOKOnly vbInformation sname 报错 Case2MsgBox 是否继续 vbYesNo vbQuestion sname 提问 EndSelectEndSubPrivateSubCommand1 Click msg Val Text1 Text EndSub 2 建立Sub过程 通用过程不属于任何一个事件过程 因此不能放在事件过程中 多个不同的事件过程使用的一段相同的程序代码 此段代码可以作为一个独立的过程定义 即通用过程 通用过程可以在标准模块中建立 也可以在窗体模块中建立 下面分别介绍在标准模块和窗体模块中建立通用过程的方法 在标准模块中建立通用过程 方法 打开标准模块代码窗口或打开窗体模块的代码窗口 使用菜单中 工具 添加过程 打开添加过程对话框 按要求选择和填写内容 然后单击确定 就建立好一个没有语句块的过程了 在过程中写入过程语句即可 在窗体模块中建立通用过程 方法 在窗体模块的通用部分或模块中的通用部分直接输入过程关键字和过程名 回车后系统自动加上EndSub 新过程产生 可在过程中输入程序命令 3 调用Sub过程 当使用下面两种方法调用过程时 则转到指定的过程执行 而实际参数的值将传递给过程中的参数表中的参数 用Call语句调用Sub过程格式 Call过程名 实际参数 说明 如果过程没有参数 则参数和括号可以省略 把过程名作为一个语句来使用格式 过程名 实际参数 说明 在这种格式中 过程名和参数之间为空格分隔 参数和参数之间使用逗号分隔 如果过程没有参数 则不需要参数 例如 调用上面msg过程 PrivateSubCommand1 Click msg1EndSub 例 编写一个计算 圆 三角形 长方形面积的程序 分析 先选择图形 使用单选钮完成 单选钮单击事件发生时显示计算面积要求使用的数据对应控件 例如 圆需要半径 三角形需要底边和高 长方形需要长和宽 然后 调用对应的计算面积的过程 一共有3个计算面积的过程 8 2Function过程 1 定义Function过程 上一节Sub过程不直接返回值 可以作为独立的语句使用 使用Function过程要返回一个值 使用方法和函数一样 我们也称其为自定义函数 Function不能直接当作语句使用 Function过程的格式如下 Static Private Public Function过程名 参数表列 As类型 语句块 过程名 表达式 ExitFunction 语句块 EndFunction 说明 Function过程是以Function开头 以EndFunction结束的一段程序 在这两句之间是语句块 称为 过程体 或 函数体 格式中的 Static Private Public 过程名 参数表列 的含义和Sub过程中的定义一样 请参考上一节中的内容 As类型 可选的 Function过程的返回值的数据类型 可以是Byte 布尔 Integer Long Currency Single Double Date String Object Variant或任何用户定义类型 ExitFunction 在运行时 运行到此命令时 程序返回调用此函数的位置执行 EndFunction 表示Function过程结束 Function定义不可以嵌套 也不能使用GoTo语句进入Function过程 但在Function的程序中可以调用Function过程 包括它自己 如果调用自己 则是一个递归函数 例 下面是一个例子 当给出3门课的成绩 返回平均分等级 PrivateFunctiondj cj1AsInteger cj2AsInteger cj3AsInteger AsStringa cj1 cj2 cj3 3Ifa 100Thendj 数据错误 ElseIfa 90Thendj 优秀 ElseIfa 80Thendj 良好 ElseIfa 60Thendj 及格 ElseIfa 0Thendj 不及格 Elsedj 数据错误 EndIfEndFunction PrivateSubCommand1 Click Dimm1AsInteger m2AsInteger m3AsIntegerm1 CInt Text1 Text m2 CInt Text2 Text m3 CInt Text3 Text Label2 Caption dj m1 m2 m3 EndSub 2 调用Function过程 Function过程的调用比较简单 它的使用方法和标准函数一样 只不过标准函数是系统定义的 而Function是编程人员定义的 因此通常称之为自定义函数 下面是自定义函数的一些例子 举例1 函数的递归调用 请编写一个函数返回n的阶乘 PrivateFunctionjc NAsDouble AsDoubleIfN 1Thenjc 1Elsejc N jc N 1 EndIfEndFunction PrivateSubCommand1 Click DimmAsDouble njcAsDoublem val Text1 Text Ifm 170ThenMsgBox 数据太大 请输入小于等于170的数据 48 警告 Text1 Text Text1 SetFocusExitSubEndIfnjc jc m Label2 Caption N的阶乘为 Str njc EndSub 8 3参数传递 当在调用一个带有参数的过程时 首先根据过程名 跳转到过程定义部分 然后进行的是 形实结合 实现调用程序和被调用的过程之间的数据传递 其中实参和形参的类型 以及传递方式 都将会直接影响数据的准确传递1形实结合形参 过程或函数定义的形参表中的变量名 数组名 形参之间逗号分隔实参 包含在过程调用的实参表中 在调用Sub或Function过程时 传送给相应过程的变量名 数组名 对象名 常数或表达式 函数过程的定义和调用 第一至第三行是函数过程的定义部分 其中在函数过程名Max后面的x y是形参 而在Form Click过程中Max a b 是函数调用部分 其中此函数过程名Max后面的a b是其对应的实参 PrivateFunctionMax xAsInteger yAsInteger AsInteger 过程代码略EndFunctionPrivateSubForm Click DimaAsInteger bAsInteger cAsInteger 部分过程代码略c Max a b 调用函数过程Max 部分过程代码略EndSub 8 3参数传递 形实结合形参与实参在过程被调用之前 并未为形参分配内存 所以形参不占用存储单元 也不可能具有值 仅当发生过程调用时 过程中形参才被分配内存单元在过程定义时 形参的作用是说明参数的类型 位置和形态以及在过程中所 扮演 的角色 形参表中的各变量之间要用逗号分隔 形参可以是 1 除定长字符串变量之外的合法变量名 2 后面跟有左 右圆括号的数组名 8 3参数传递 形实结合按位置传送在过程调用传递参数时 当采用按位置传送方式 形参表与实参表中的对应变量名 可以不必相同 形实结合 是按对应 位置 结合 即第一个实参与第一个形参结合 第二个实参与第二个形参结合 依次类推 而不是按 名字 结合 SubForm Click DimaAsSingle bAsInteger dAsLongCallSample1 b a d EndSubSubSample1 aAsInteger bAsSingle cAsLong EndSub 实参与形参在顺序 数量 类型上做到匹配 8 3参数传递 形实结合形参与实参类型形式的对应关系 PrivateSubForm Click DimaAsString 4 bAsBoolean arr 10 AsIntegerCallsample2 arr a Notb 120 3 Form1 EndSubPrivateSubsample2 a AsInteger bAsString cAsBoolean dAsSingle eAsForm EndSub 8 3参数传递 形实结合形参与实参 在 形实结合 时 当实参表中的参数是变量或数组元素 对象时 形参和实参对应的名字可以不同 但是要做到在参数的个数 顺序上以及对应位置的参数数据类型要完全相同 除非对应的形参是缺省的变体类型 则数据类型可以不同当实参表中的参数是常数 表达式时 若发现实参与对应形参的类型不相同 则遵循赋值语句中不同类型数据赋值的原则 进行强制转换为与形参相同类型 再传送给形参 若无法实现强制转换为与形参相同的类型 则报错 形实结合传递的参数是类型不一致的常数或表达式 PrivateSubForm Click DimaAsSingle bAsIntegera 230 5 b 230CallSample3 230 26 a b 2 EndSubPrivateSubSample3 aAsInteger bAsString cAsLong EndSub 字符串常量 230 26 数值型常量230 26 整型值230 变量加括号的 将变量强行转换为表达式单精度型变量a a 单精度型的表达式 字符型 完成表达式b 2的计算 整型值460 长整型值460 8 3参数传递 8 3参数传递 形实结合指名传送所谓的指名传送就是显式地指出与形式参数结合的实参 把形参和实参用 连接起来 调用的时候按下面方法 指名传送方式不受位置次序的限制 表面看来 指名传送比按位置传送要书写更多的代码 但它增加了可读性 在VB提供的 方法 中 有些可以使用指名传送 有些不可以 请在使用时参看帮助 PrivateSubStu StuNameAsString StuNoAsString StuComputerAsInteger EndSubCallStu Stuname 李平 Stuno 2001001001 StuComputer 95 参数传递方式按值传递 PassedbyValue 按地址传递 PassedbyReference 引用传递 8 3参数传递 参数传递方式按值传递 PassedbyValue 过程调用时 若形参名前面有关键字 ByVal 则指定了它是一个按值传递的参数VB给按值传递参数分配一个临时存储单元 将实参变量的值拷贝到这个临时单元中去 即按值传递参数时 传递的只是实参变量的副本 如果在被调过程中改变了形参值 只影响副本 而不会影响实参变量本身 即当返回调用程序时 实参变量保持调用前的值不变 8 3参数传递 例题 PrivateSubForm Click DimxAsInteger yAsIntegerx 10 y 15CallValue x y Print x x y yEndSubPrivateSubValue ByValmAsInteger ByValnAsInteger m m 2 n n 5Print m m n nEndSub BYVAL参数 按值传递 实参直接将数据单向传入给形参 之后实参与形参没有任何关系 窗体上显示 m 20n 10 窗体上显示 m 20n 10 x 10y 15 参数传递方式按地址传递 PassedbyReference 引用传递在定义过程 若形参名前面没有关键字 ByVal 即形参名前面缺省修饰词 或带有关键字 ByRef 时 则指定了它是一个按地址传递的参数按地址传递参数时 把实参变量 简单变量 数组元素以及记录等 的地址传送给被调过程 因此实参变量的地址和与之结合的形参地址是相同的 即形参和实参共用内存的同一地址 即共享同一个存储单元 这样在被调过程中的形式参数值一旦发生改变 相应的实参的值也跟着同步改变了 8 3参数传递 例题 PrivateSubForm Click DimxAsInteger yAsIntegerx 10 y 15CallValue x y Print x x y yEndSubPrivateSubValue mAsInteger ByRefnAsInteger m m 2 n n 5Print m m n nEndSub BYREF参数 按地址传递 形参与实参共享同一存储单元 形参变化直接影响实参 窗体上显示 m 20n 10 窗体上显示 m 20n 10 x 20y 10 数组参数的传送 在过程的定义中 参数为数组则应该将数组名后加上括弧 在调用过程时 参数为数组也应该将数组名后加上括弧 应该注意的是 在形参和实参表中的数组名后的括弧内不能写下标的上下界 当在实参中 数组的括弧中有下标 则传递的不是数组 而是指定的下标元素的内容 在过程中 形式参数的数组的下标需要用Lbound和Ubound函数来取出 参数传递参考 对于占用内存空间小的参数 例如 整型 长整型 单精度 如果不希望实际参数的值被调用过程修改 就使用值传递 但是为了提高效率 字符串和数组一般使用地址传递 另外用户定义类型的参数和控件只能使用地址传递 在使用双精度 货币型 变体数据可以用两种方式传递 但是值传递还是比较不容易出错的 在编程时 可以先使用值传递 运行通过后 再改为地址传递 在Function过程中 过程名只可以返回一个值 如果需要返回多个值 还是用地址传递进行操作 让参数存放返回的值 当实参为常数和表达式时 应该注意形参的数据类型的匹配问题 字符串和数值常数分别传送给字符串类型的形参和数值型的形参 当数值型数据类型不同时 常数和表达式的结果将被强制类型转换 在使用记录类型的变量时 定义过程的参数时要定义它的类型为指定的记录类型 在传递单个记录类型的变量元素时 实参中书写方式为 记录型变量名 元素 8 4对象参数 对象参数传递窗体或控件作为过程的参数在过程定义的形参表中 若把形参变量的类型声明为 Control 就可以向过程传递控件 若把类型声明为 Form 则可向过程传递窗体注意 对象的传递只能是按地址传递完成对于多个对象的统一的属性的设置 以及类似的操作 判断作为实参的控件是否具有通用过程中所列的控件的属性 TypeOf语句格式 If ElseIf TypeOf控件名称Is控件类型例 IfTypeOfTestCtrl1IsTextboxThenTestCtrl1 Text Microsoftvisualbasic EndIf 例题 过程调用实现控件对象的字体初始化 PrivateSubForm Load DimiAsIntegerCallfontinit Label1 调用过程初始化标签对象的字体Callfontinit Text1 调用过程初始化文本框对象的字体Fori 0To3 通过循环初始化选项按钮数组的字体Callfontinit Option1 i NextIEndSub Subfontinit xAsControl 对象字体初始化过程x FontSize 15x FontName 黑体 x FontItalic TrueEndSub 8 6键盘事件过程对于接受文本输入的控件 如 文本框 简单组合框和下拉组合框等 需要控制和处理输入的文本 常常需要对键盘事件进行编程KeyPress KeyDown和KeyUp键盘事件只用于能够聚焦的对象 如窗体 文本框 命令按钮 选项按钮 复选框 组合框 列表框 图片框 滚动条等控件对于窗体 仅当它上面没有可视和有效的控件或KeyPreview属性被设置为True时才能接收键盘事件 8 6键盘事件过程KeyPress事件当用户按下和松开一个能产生Ascii码的键时发生KeyPress事件 严格地说 当按下某个能产生Ascii码的键时 所触发的是当前得到焦点的那个对象的KeyPress事件PrivateSub对象名 KeyPress KeyAsciiAsInteger EndSub参数KeyAscii就是该过程接受到的按键的Ascii码按下大写字母 B KeyAscii的值为66按下小写字母 b KeyAscii的值为98 8 6键盘事件过程KeyPress事件在键盘上的按键并非都能产生Ascii码 如 方向键 功能键F1 F12 Shift Ctrl Alt键就不产生Ascii码 不会引发KeyPress事件 而数字 大小写字母等可打印的键盘字符 Enter BackSpace Esc Tab等都可以KeyPress事件过程在截取TextBox或ComboBox控件所输入的击键时是非常有用的 它可立即测试击键的有效性或在字符输入时对其进行格式处理改变keyascii参数的值会改变所显示的字符 例题 编写程序 实现对于用户在文本框中输入的字母 不管大小写 始终以大写显示在文本框中分析 小写字母按键的Ascii值的范围 97 122 小写转换成大写字符 小写字母与大写字母的Ascii差值为32输入时立即转换 编写文本框的KeyPress事件过程 PrivateSubText1 KeyPress KeyAsciiAsInteger IfKeyAscii 97AndKeyAscii 122Then 判断是否是小写字母KeyAscii KeyAscii 32 小写转换成大写EndIfEndSub 例题 在默认情况下 控件的键盘事件优先于窗体的键盘事件 因此在发生键盘事件时 总是激活目前得到焦点的控件的键盘事件 若窗体的KeyPreview属性被设置为True 默认为False 则不管目前谁得到焦点 总是先触发窗体键盘事件 后触发焦点控件的键盘事件 否则不会触发窗体的键盘事件注意程序中当窗体的KeyPreview属性被设置为True或默认值False 键盘事件的不同触发次序设窗体的KeyPreview属性被设置默认值False 程序运行时 通过命令按钮切换为True 在窗体和文本框的KeyPress事件过程中编写了输出标志信息 8 6键盘事件过程KeyUp和KeyDown事件过程和KeyPress事件不同 KeyUp和KeyDown事件返回的是键盘的直接状态 即KeyUp和KeyDown事件返回的是 键 而KeyPress事件返回的是 字符 的Ascii码 当用户按下键盘上的任意一个键时 就会触发焦点对象的KeyDown事件 当释放按键 就会触发KeyUp事件 8 6键盘事件过程KeyDown事件过程PrivateSub对象名 KeyDown keycodeAsInteger shiftAsInteger EndSubKeyUp事件过程PrivateSub对象名 KeyUp keycodeAsInteger shiftAsInteger EndSub 8 6键盘事件过程KeyUp和KeyDown事件过程KeyCode参数是用户按下的那个键的扫描码 键盘上的每一个按键都一个扫描码 且各自不同 该码以 键 为准 它不同于KeyPress事件中的KeyAscii参数 以 字符 为准 大小写字母 A 和 a 用的是同一个键 所以它们的扫描码相同 即KeyCode相同 而Ascii码不同 A 是65 a 是97 即KeyAscii不同往往只能通过KeyCode参数了解用户按下键盘上的哪个键 不是字符 键盘事件过程KeyUp和KeyDown事件过程Shift参数是Shift Ctrl和Alt三个转换键目前按下的状态信息 取值是一个是位域 它用最少的位响应SHIFT键 位0 CTRL键 位1 和ALT键 位2 这些位分别对应于值1 2和4 键盘事件过程KeyUp和KeyDown事件过程的应用扩展的字符键如功能键等定位键键盘修饰键和按键的组合区别数字小键盘和常规数字键 下列情况不会触发KeyDown和KeyUp事件窗体有一个CommandButton控件 并且Default属性设置为True时的Enter键窗体有一个CommandButton控件 并且Cancel属性设置为True时的Esc键Tab键 例题 编写程序 利用KeyDown和KeyUp事件显示按下键和释放键情况分析 根据KeyCode返回对应的字符 Chr函数 PrivateSubText1 KeyDown KeyCodeAsInteger ShiftAsInteger Print 按下 Chr KeyCode KeyCodeEndSubPrivateSubText1 KeyUp KeyCodeAsInteger ShiftAsInteger Print 释放 Chr KeyCode KeyCodeEndSub PrivateSubform KeyDown KeyCodeAsInteger ShiftAsInteger IfShift 1ThenPrint 按下Shift键 KeyCodeIfShift 2ThenPrint 按下Ctrl键 KeyCodeIfShift 3ThenPrint 按下Ctrl Shift键 KeyCodeIfShift 4ThenPrint 按下Alt键 KeyCodeIfShift 5ThenPrint 按下Alt Shift键 KeyCodeIfShift 6ThenPrint 按下Alt Ctrl键 KeyCodeIfShift 7ThenPrint 按下Alt Ctrl Shift键 KeyCodeEndSubPrivateSubform KeyUp KeyCodeAsInteger ShiftAsInteger Print 释放 KeyCodeEndSub 例题 编写程序 利用KeyDown和KeyUp事件显示按下和释放转换键情况 8 7鼠标器事件过程鼠标的单击和双击事件鼠标事件 鼠标的按下 移动和释放事件 即MouseDown MouseMove和MouseUp事件适用于以下对象 包括窗体 文本框 命令按钮 选项按钮 复选框 列表框 图片框 标签 框架等鼠标事件被用来识别和响应各种鼠标状态 并把这些状态看作独立的事件 在按下鼠标按钮并释放时 Click事件只能把此过程识别为一个单一的操作 单击操作鼠标事件不同于Click事件和DblClick事件之处还在于 鼠标事件能够区分各鼠标按钮与Shift Alt Ctrl键 8 7鼠标器事件过程MouseDown事件过程PrivateSub对象名 MouseDown ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle EndSubMouseUp事件过程 PrivateSub对象名 MouseUp ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle EndSub 3 9 2鼠标器事件过程MouseMove事件过程 PrivateSub对象名 MouseMove ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle EndSubShift X Y参数的含义同键盘事件Button参数值指示此时按下或释放了哪个鼠标键 该参数是一个整数 鼠标器事件过程对于MouseMove事件来说 button参数指示的是所有鼠标按键当前的状态 一个MouseMove事件可指示某些 全部或没有一个按钮被按下MouseDown和MouseUp事件来说 button参数在每个事件精确地指示一个按键 即不能检查两个或三个键同时被按下或松开的情况 因此取值只能是下表中的前三种 鼠标器事件过程MouseDown是三种鼠标事件中最常使用的事件 例如 在运行时可用它调整控件在窗体上的位置 也可用它实现某些图形效果 按下鼠标按钮时就可触发此事件 MouseMove事件伴随鼠标指针在对象间移动时连续不断地产生 除非有另一个对象捕获了鼠标 否则 当鼠标位置在对象的边界范围内时该对象就能接收MouseMove事件 例题 利用上述鼠标事件 在窗体上绘制图形 要求 按下鼠标开始绘制 并根据鼠标移动的位置进行绘制 释放鼠标停止绘制分析 DimdrawstateAsBoolean 设置绘制状态标志Form Load DrawWidth 10 设置绘制笔刷的宽度ForeColor RGB 0 0 255 设置绘制的颜色Form MouseDown drawstate True 表示开始下笔绘制Form MouseMove IfdrawstateThenPSet X Y 根据目前鼠标移动的位置绘制点EndIfForm MouseUp drawstate False 表示停笔 例题 结合Move方法使用鼠标的MouseDown事件 实现根据鼠标按下的位置控制 云朵 在背景图片上的任意飘移分析 DimmxAsSingle myAsSingle dxAsSingle dyAsSinglePrivateSubForm Load Timer1 Interval 10EndSubPrivateSubpicture1 MouseDown ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle mx X Image1 Left 100 计算云朵每次微移量my Y Image1 Top 100dx X dy Y 记录下目标位置Timer1 Enabled TrueEndSubPrivateSubTimer1 Timer Image1 MoveImage1 Left mx Image1 Top myIfAbs Image1 Left dx 1OrAbs Image1 Top dy 1ThenTimer1 Enabled FalseEndIfEndSub 例题 利用上述鼠标的事件 并根据按下鼠标的左右键的不同 实现对命令按钮的鼠标操作时鼠标指针形状的改变分析 PrivateSubCommand1 MouseDown ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle IfButton 1ThenCommand1 MousePointer 11ElseIfButton 2ThenCommand1 MousePointer 13EndIfEndSubPrivateSubCommand1 MouseMove ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle Command1 MousePointer 14EndSubPrivateSubCommand1 MouseUp ButtonAsInteger ShiftAsInteger XAsSingle YAsSingle Command1 MousePointer 0EndSub 8 8拖放 鼠标将一个对象从某个位置拖曳到另一个位置在拖放的过程中 总是首先将鼠标指向待移动的对象 称为源对象 然后按下鼠标键不松开 移动鼠标 源对象将随鼠标的移动而在其背景对象上被拖动 Drag 当被拖到目标位置 称为目标对象 则松开鼠标 放下 Drop 该对象根据拖放情况的描述 经常利用源对象的鼠标按下事件 启动源对象的拖放模式 而利用目标对象的拖放 DragDrop 事件实现源对象的移动 当然 还会触发在拖动过程中经过的对象和目标对象的拖动 DragOver 事件 8 8拖放 1与拖放有关的属性 事件和方法除了菜单 计时器和通用对话框外 其他对象均可以在程序运行期间被拖放属性DragMode 设置源对象的拖放模式 属性值为1 为自动拖动方式 控件不能正常响应鼠标事件 默认属性值为0 表示启用手动拖动方式 这时必须在MouseDown事件过程中 用Drag方法启动 拖动 确定拖放操作开始 常常在MouseUp事件过程中 用Drag方法关闭 拖动 确定拖放操作结束DropIcon属性 用于设置在拖动时 代表对象移动的图标 8 8拖放 1与拖放有关的属性 事件和方法方法Drag 用于人工启动或停止一个拖动过程对象名 Drag 整数 整数取值为0 1 2分别表示取消 开始或结束拖放操作 若此参数省略 则表示开始拖放操作 8 8拖放 1与拖放有关的属性 事件和方法事件DragOver 拖放操作正在进行时发生 可使用此事件对鼠标指针在一个有效目标上的进入 离开或停顿等进行监控 鼠标指针的位置决定接收此事件的目标对象P

温馨提示

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

评论

0/150

提交评论