VB6.0 Select Case语句

注明:我也参与了百度百科上『Select Case语句』这一词条的编辑,哼!没过多久语法部分被人改成英文语法,轻微破坏了文章“信达雅”的“达”这一方面,有点郁闷但勉强还能接受吧。

语法

Select Case <指示变量或表达式>
Case <情形1>
<语句组1>
Case <情形2>
<语句组2>
....
Case <情形n>
<语句组n>
Case Else
<默认语句组,以上语句组都因情形不符合实际时执行>
End Select
其中,表述情形的关键字,有IS和TO,多个情形要并列在一起时,使用逗号(英文)连接。当省略Case Else语句并且语句组都因情形不符合实际时,语句的执行,会直接到达End Select。如果在执行语句的时候,有需要跳过没有必要再执行的语句而直接结束Select Case的情况时,请使用exit select。
注意
在“<指示变量或表达式>”不是True或False关键字时,与情形有关的逻辑运算(And、Or、Not)会没有意义。因为逻辑运算的结果是True或False,不是表述具体情况的值或者范围。需要比较大小时,请使用IS、To关键字。以上为了给出一个能够通用的语法而如此表述。
在“<指示变量或表达式>”是True或False关键字时,Is、To关键字没有意义。
以上两种情况,切记不要搞混。
嵌套
各语句组中也可

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
2010-1-28 VB转易和易转VB最新版本获取 请您访问: http://shop60450757.taobao.com/ 2010-1-12 VB到易语言源代码转译软件1.0版的重要说明 本说明随VB到易语言源代码转译软件一同分发,使用本软件之前请先仔细阅读本说明! 一、操作说明 1、本软件目前可以转译的VB源代码是指用Visual Basic 6.0编写的源程序代码,得到的易语言源代码是指用易语言4.14编写的源程序代码。 2、从VB源代码到易语言源代码的转译很难能百分百成功!首先,VB的窗体、控件的属性、方法和事件就很难用易语言的窗体、控件的属性、方法和事件一一对应。其次,VB的内部函数也不一定能找到易语言支持库的相应方法。 3、目前,本软件所能做到的就是:其一,将VB的模块代码中的子程序定义、函数定义、参数定义、变量定义尽可能正确地转译为对应的易语言定义。其二,将VB的代码流程控制命令如If……Then、Select Case、For……Next等尽可能正确地转译为易语言的代码流程控制命令。 4、得到的易语言源代码文本全选、复制、并粘贴到易语言4.14的代码编辑器窗口,就会产生易语言的表格式和流程图式的直观代码。但根据上述第2点和第3点,通过转译得到的易语言源程序只是半成品,要想它能成功并正确运行,大多数情况下还需要人工多番调试和仔细修改。 5、待转译的VB源代码应当符合以下规范条件,否则可能出现转译问题: (1)待转译的VB源代码应当使用VB6.0的代码编辑器编辑和保存,并且能全编译成功并正确运行,否则可能出现一大堆转译不正确的问题! (2)VB的数组到易语言的数组的转译不能保证正确无误,还需要人工审查VB的数组各维下限。建议将VB的数组各维下限设为1,数组总维数不超过6。 (3)尽量不要在一行中书写用“:”分隔的多条语句,应该一行只书写一条语句,否则可能出现转译不正确的问题。 (4)尽量不要在“Case语句中使用多个复杂条件,否则可能出现转译不正确的问题。建议各行“Case语句使用单个条件。 (5)不支持VB的这些流程控制命令转译:GoTo、GoSub、Return。如果VB源代码包含这些流程控制命令,建议在转译前修改。 (6)VB的“For Each...Next”流程控制命令不能确切地转译为易语言流程控制命令,必须要人工修正转译后的相关代码。 (7)VB的类模块的“Property Let”和“Property Get”方法不能确切地转译为易语言子程序,必须要人工修正转译后的相关代码。 二、版本划分 本软件分为教学演示版和商业应用版。 教学演示版免费,但功能有所限制,可辅助VB6.0教学研究和易语言4.14教学研究。 商业应用版收费,但功能不受限制,可通过转译VB6.0源代码为易语言4.14源代码,加快软件移植和开发过程,但请勿侵犯他人软件版权!如果有需要,请与作者联系购买! 本软件采用易语言编写,需要本软件源代码也可与作者联系购买! 三、作者免责声明 本软件只是单纯尽力实现从VB源代码到易语言源代码的正确转译,但作者不作任何担保!如果您因为使用本软件造成任何意外或损失,作者概不负责!如果您利用本软件转译的源代码属于他人软件版权保护范围,因此产生的一切社会和法律责任由您自负,与作者无关。 如果您使用本软件,即表示您同意接受此声明! 软件作者:梁远海 电子邮箱:[email protected] 版权所有(C) 2010 Liang YuanHai
VB6.0 为无标题的窗体添加鼠标效果,Rect返回当前窗口位置,Point返回当前鼠标位置,本代码主要是使用case语句来实现,可练习一下case语句的用法哦,分享代码:   Dim Point As POINTAPI   Call GetWindowRect(Me.hwnd, Rect) 'Rect返回当前窗口位置   Call GetCursorPos(Point) 'Point返回当前鼠标位置   Select Case True   Case Point.X < Rect.Left 5 And Point.Y < Rect.Top 5 '鼠标位于窗体左上方    Screen.MousePointer = vbSizeNWSE '45度双向鼠标    Action = "LeftUp"   Case Point.X > Rect.Right - 5 And Point.Y > Rect.Bottom - 5 '鼠标位于窗体右下方    Screen.MousePointer = vbSizeNWSE    Action = "RightDown"   Case Point.X > Rect.Right - 5 And Point.Y < Rect.Top 5 '鼠标位于窗体右上方    Screen.MousePointer = vbSizeNESW    Action = "RightUp"   Case Point.X < Rect.Left 5 And Point.Y > Rect.Bottom - 5 '鼠标位于窗体的左下方    Screen.MousePointer = vbSizeNESW    Action = "LeftDown"   Case Point.X < Rect.Left 5 '鼠标位于窗体的左侧    Screen.MousePointer = vbSizeWE    Action = "Left"   Case Point.X > Rect.Right - 5 '鼠标位于窗体的右侧    Screen.MousePointer = vbSizeWE    Action = "Right"   Case Point.Y < Rect.Top 5 '鼠标位于窗体的上面    Screen.MousePointer = vbSizeNS '垂直双向鼠标指针    Action = "Up"   Case Point.Y > Rect.Bottom - 5 '鼠标位于窗体底部    Screen.MousePointer = vbSizeNS    Action = "Down"   Case Else '鼠标移动    Screen.MousePointer = 0 '默认鼠标指针    Action = "Move"   End Select
VB6.0动态加载ActiveX控件漫谈 深圳 罗汉军 罗德昌 熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程, 但唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。 VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功 能,由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语句中用 New 关键字、CreateObject 或 GetObject 从部件外面将对象引用赋予变 量。 如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引 用: Dim xlApp1 As Excel.Application Set xlApp1 = New Excel.Application 或 Dim xlApp As Object '定义存放引用对象的变量。 Set xlApp = CreateObject("excel.application") xlApp.Visible = True ---- 这些语法很容易造成误导,以为动态加载ActiveX控件也是此方法,可能有朋 友也象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种 考虑,动态加载ActiveX控件是扩展控件集合的方式实现,通过实际摸索,终于就如 何实现动态ActiveX控件找出了一条切实可行的方法,下面以一个具体的实例来详细说 明。 一、ActiveX控件 ---- ActiveX 控件是 Visual Basic 工具箱的扩充部分。使用 ActiveX 控件的方 法与使用其它标准内装的控件,如 CheckBox 控件,完全一样。在程序中加入 ActiveX 控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。 ---- ActiveX 部件通过客户端/服务器关系与应用程序— 及与部件相互之间— 交 互作用。客户端是使用部件功能的应用程序代码或部件。服务器是部件及其关联的对象。 例如,假设应用程序使用 ActiveX 控件来提供一个标准的雇员窗体,供公司的多种 应用程序使用。提供雇员窗体的 ActiveX 控件就是服务器,使用这个控件的应用程序 就是服务器的客户端。 二、加载方法 ---- VB6.0中对Controls 集合进行了扩展,以前版本中Controls 集合在窗体上列 举出已加载的控件,这在迭代过程中是很有用的。Controls 集合标识一个叫做 Controls的内在窗体级变量。如果忽略可选的 object 所在处的整数,则关键字 Controls 必须包括在内。我们通常在窗口中使用如下代码: Text1.Text="Hello, world" 其实也可以使用如下代码达到同一目的: Controls(1).Text="Hello, world" ---- 在VB6.0中除了原来的Clear、Remove 方法外(很奇怪,为什么微软在VB5.0中 只提供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处), 增加了Add方法,该方法就是用于动态加载控件的: Controls.Add(progid as String, Name as String); progid: ActiveX部件的ProgID,如:"VB.CheckBox"; Name:ActiveX部件加载后的名称,如: "MyCheckBox"; 若要在窗体上添加一个名为MyButton的按钮,可以使用: dim oControl as Object '窗体级变量 注意:这里声明为Object对象类型 Private Sub LoadControl() Set oControl = Controls.Add ("VB.CommandButton", "MyButton") oControl.Left = 10 oControl.Top = 10 oControl.Visible = True '使控件可见 End Sub ---- 这是VB6.0的标准语法,它在例程中也是如此演示的,不过该方法虽然现实了 控件的动态加载,按钮显示在窗体上,可以象普通按钮一样按下去,但加载的控件不能 预先设计响应事件代码,如:事件Sub MyButton_Click()将是非法的,当然,可以将要 响应的事件封装在控件内部。就编程的观点来看该方法没什么大的用处,开发ActiveX 控件的目的是为了资源共享,为了被其他开发人员利用,所以要提供必要的事件接口, 显然利用该方法不行,通过分析VBControls等相关对象,找出VBControlExtender对象 与EventInfo相结合能提供事件陷井捕捉,VBControlExtender对象对动态添加控件特 别有用,它提供了一套通用的属性、方法、事件给开发人员,它的一个突出特点是能编 程设计控件的事件,熟习类编程的朋友对带事件的对象声明一定不会陌生: ---- Dim WithEvents objElemt as CElemtVBControlExtender也不例外,声明的 语法一样,只不过它有个特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到对 象使用RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数 和参数的值。VBControlExtender和 EventInfo相结合,采用Select Case 就可以预先 将不同类对象的事件放置一起,各自独立运作。将上面的代码改写一下就能提供Click 事件了: ---- Dim WithEvents oControl As VBControlExtender '带事件声明声明之后您 就可以在代码窗口的左上角的对象下拉框中发现该对象出现了,也就是说,该对象有了 事件或方法了,它的事件有DragDrop,DragOver ,LostFocus ,GotFocus , ObjectEvent和Validate,其中ObjectEvent是通用的事件捕捉。 Private Sub LoadControl() Set oControl = Controls.Add ("VB. CommandButton", "MyButton") oControl.Visible = True End Sub Private Sub oControl_ObjectEvent(Info As EventInfo) Select Case Info.Name Case "Click" 'Click事件 '您可以添加处理Click事件代码 MsgBox "您按了MyButton!" Case Else ' 其他事件 ' Handle unknown events here. End Select End Sub ---- 当然对微软提供的标准控件能采用该方法添加,大家都不会怀疑,但自己开 发的控件也能吗?答案是肯定的,我们可以用一个实际的例子进行说明。 三、实例描述 ---- 假设一个本地网络的监控系统,需要在原理图与实物示意图间切换,原理图 包括组网结构、传输资源、监控主机等,而实物示意图包括路由器、设备、采集器等, 当然两种图的事件要一致,如双击某个设备图形将显示给设备的实时数据等,为了简化 维护,将原理图与实物示意图封装成ActiveX控件,由于每种图需要加载许多图形控 件,消耗资源较大,不能同时加载,需要将其分解为两个控件,在切换时首先卸载一个 控件,然后加载另一个控件,所以要实现动态加载ActiveX控件。 ---- 原理图控件为--Theory.ocx ,对应工程为CTheory; ---- 实物图控件为---Fact.ocx ,对应工程为CFact; ---- 注意:为了简化,在设计控件时不设置许可证关键字。 ---- 实物图控件上的图形对象可以被拖动,拖动后的位置信息通过事件 ChangePosition来通知拥有该控件的窗体,以便下次加载能显示在最后位置,实物 图和原理图控件都有双击事件完成的工作相同,其他事件此处忽略。 ---- 四、具体示例 ---- 1、准备工作 ---- 对控件Theory.ocx 、Fact.ocx 进行注册(利用Regsvr32.exe注册); ---- 建立窗体frmTest.frm ,在窗体上放置按钮cmdLoadOcx—“原理图” ---- 2、声明窗体级变量与加载函数LoadControl Dim WithEvents oControl As VBControlExtender '地图仿真控件对象 Dim mblnTheory As Boolean '是否显示原理图 Private Function LoadControl(intType As Integer) If Not oControl Is Nothing Then '首先判断对象是否存在,若存在则卸载 Controls.Remove("MapView") '卸载控件,此操作非常重要 End If If intType = 0 Then Set oControl = Controls.Add ("CTheory. Theory", "MapView") Else Set oControl = Controls.Add ("CFact.Fact", "MapView") End If oControl.Height = 3500 oControl.Width = 6500 oControl.Top = 100 oControl.Visible = True End Function Private Sub Form_Load() mblnTheory = True End Sub ---- 3、为按钮cmdLoadOcx编写代码 Private Sub cmdLoadOCX_Click() If mblnTheory Then Call LoadControl(0) mblnTheory = False cmdLoadOCX.Caption = "实物图" Else Call LoadControl(1) mblnTheory = True cmdLoadOCX.Caption = "原理图" End If End Sub ---- 4、为事件ChangePosition编写代码 Private Sub oControl_ObjectEvent (Info As EventInfo) Select Case Info.Name Case "ChangePosition" MsgBox CStr(Info.EventParamters.Item( 1).Value) + ":" + _ CStr(Info.EventParamters.Item(2).Value) Case "DbClick" '双击处理代码 Case Else ' End Select End Sub ---- 注意: EventInfo的参数EventParamters集合中是以1开始的,一般来说,微 软新的集合一般是以1开始的,而旧的是以0开始的,如RdoErrors.Item(0)。 ---- 5、关闭窗口前卸载控件 Private Sub Form_Unload(Cancel As Integer) Controls.Remove("MapView") Set oControl = Nothing End Sub ---- 6、特别注意 ---- 通过Controls.Add方法添加的ActiveX控件一定不能在该工程中有该控件的任 何引用,否则系统将出错。 四、小结 ---- 通过使用动态加载ActiveX控件使用庞大的应用程序变得很小,将不同的 ActiveX控件进行各种组合,使应用程序更加灵活多变,如您的应用系统要处理三十种门禁, 而某个具体的用户可能只有一种或两种门禁,根本没必要首先将所有门禁包含到应用 中,可将各个门禁独立封装,只安装注册需要的组件,就象Windows的自定义安装一样。 微软的未来技术基础是分布式的组件技术(DCOM),将会把代码的重用发挥得淋漓尽致。 您不妨试一试动态加载,也许会产生令您惊喜的效果! ---- 本代码在Win98、VB6.0(英文版)上编译、运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值