精华内容
下载资源
问答
  • VB.net 中Module的使用1

    千次阅读 2013-09-04 22:46:35
    创建只包含一个共享成员一个VB.NET类更简单方法就是定义一个ModuleModule是规则、不能创建类,它成员是静态。 类模块与模块区别: 1.类模块中的数据对创建每一个新实例都是惟一,而在标准模块...
    创建只包含一个共享成员的一个VB.NET类的更简单的方法就是定义一个Module。Module是规则的、不能创建的类,它的成员是静态的。
    类模块与模块的区别:
    1.类模块中的数据对创建的每一个新实例都是惟一的,而在标准模块中的数据对应 应用程序或者对标准模块内的方法是全局的.
    2.当类实例失效时,类模块中的数据也失效,或者收集到垃圾桶,而标准模块在应用程序的生存期都是活动的,直到应用程序退出.
    但还是不太清楚其实用性,想问一下大家,
    1、如果我在 模块(Module)里实例化一个类,如:
    Module Model
        Public mod_DB As New DB
            …… ……
     是否 模块(Module)会把这个 mod_DB 成员 shared 了,并且每次在其他地方调用mod_DB时,mod_DB是共享的,mod_DB里面的数据(如果有)那就一定要是相同的,不然数据就不能独立而错误了。
     
     还是 模块(Module)在每次被调用时都 new 一次 DB 赋给 mod_DB ,这时 mod_DB里面的数据就可以互相独立而不受干扰了??
    最后,问一下 在模块(Module)里实例化一个类 是否有其意义。好不好或能不能这样做?
    请大家指教指教,谢谢。

    我以前做了一个小东西,使用module,就是因为类定义问题出现了bug.
    模块(Module)在每次被调用时都 new 一次 DB 赋给 mod_DB  会出现干扰。
    模块(Module)里实例化一个类 有其意义,如果那个类是唯一的不可变的,用在module里面很好。
    Module好比静态类,可以直接使用ModuleName.FunctionName()调用其中方法。

    Class ClassName
       public shared Function fnXXX() 
       ...
       End Function
    End Class
    类似
    直接使用ClassName.fnXXX()调用。
    Module ModuleName
       public Function fnXXX()
    End Module
    调用:ModuleName.fnXXX()
    Module里的成员在第一次使用到它时被自动初始化。
    (默认有个不带参数的New方法,你可以自己添加)

    模块怎么会被new 很多次呢?
    你在模块中建立了一个类的实例,那么就相当于声明了一个shared的变量。也就是说你可以在程序的任何地方直接使用该类的这个实例的属性或者方法,而不用再实例化一个出来。
    共享级别的过程或者字段,是说经常被调用的对象。比如说连接数据库的字符串和返回连接的方法和过程。
    你可以在模块中实例化一个类,定义若干的方法或过程,然后就要使用application.run()来打开一个主窗口(或登录窗口)
    存在这种疑问可以自己测试呀:
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Windows 窗体设计器生成的代码
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim a As AppClass
            a = New AppClass
            a = New AppClass
            a = New AppClass
        End Sub
    End Class
    Public Class TestClass
        Private i As Integer
        Sub New()
            i = i + 1
        End Sub
        Public ReadOnly Property NowI() As Integer
            Get
                Return i
            End Get
        End Property
    End Class
    Public Module TestModule
        Public m As New TestClass
    End Module
    Public Class AppClass
        Sub New()
            MsgBox(TestModule.m.NowI)
        End Sub
    End Class
    再将Module转换为Class,效果是一样的。
    Public Class AppClass
        Sub New()
            MsgBox(TestModuleClass.m.NowI)
        End Sub
    End Class
    Public NotInheritable Class TestModuleClass
        Public Shared m As TestClass
        Shared Sub New()
            m = New TestClass
        End Sub
    End Class
    谢谢 大家的意见!按此说法应该是共享的,但这样 实例了的类的数据也要是一定相同的,不然就会有数据不正确,这样说
    在 Module 直接写 需 shared 的方法和其字段,而不用实例化其他的类,因为实实例化一个对象一般是要独立的,不受影响的,这样和 Module 里的 共享 思想就有冲突了,
    大家觉得是否是这样呢??
    另,谢谢大家的热心帮助!
    我那个Public Class TestClass
    有点问题
    Private i As Integer
    应该是
    Private Shared i As Integer
    这样才能反映i是否改变了。
    当然,改了以后的结果还是一样的,i没变。
    Module和静态类思想是一样的。在内存中只被实例化一次。当然不需要你进行实例化。
    包括一些静态的数据成员,他们在托管堆中的位置与一般对象的位置是不同的。
    以上是我自己的想法 :)
    感觉是那种首先运行,首先实例化的东西。提供初始化功能,具体功能和class很像!
    展开全文
  • VB.NET中Module

    千次阅读 热门讨论 2013-07-26 09:18:34
    介绍VB.NET中Module的概念和使用

    1. 概念

    为什么会有模块的概念?

        在VB中有模块和类模块的概念,所谓模块就是存放公用的一些方法(Sub)或者(Function);而类模块,相当于我们经常说的类的概念。所以在VB.NET中也就有了Module的概念,它是继承下来的。但是在VB.NET里面Module有一些新的功能。

     1. 模块(Module)的方法特点:这些方法自动就是静态的(或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的。

     2. 模块无法继承,也无法实现接口

     3. 每个模块均正好有一个实例,并且无需创建此实例或将其赋给变量。模块不支持继承,也不实现接口。请注意,从类或结构是类型这一意义上说,模块并非类型 - 您无法将编程元素声明为具有模块的数据类型。

     4. 在命名空间级别使用 Module。这意味着模块的声明上下文必须是源文件或命名空间,而不能是类、结构、模块、接口、过程或块。无法在一个模块或任何类型中嵌套另一个模块。

    2. 和Class的区别

     1. 术语。以前的 Visual Basic 版本识别两种类型的模块:类模块(.cls 文件)和标准模块(.bas 文件)。当前版本会分别调用这些类和模块。

     2. 共享成员。可以控制类的成员是共享成员还是实例成员。

     3. 面向对象。类是面向对象的,但模块不是。因此,只能将类实例化为对象。

    3. 使用示例

    模块的使用了类的使用区别其实不大,可以理解为一个不能够实例化的静态类,在里面我们可以定义一些全局变量和函数。在模块中定义全局变量,入口函数Main和其他共享或私有函数和方法,引用模块中定义的变量,函数和方法不需要进行New实例化。

    Module中创建了Main函数,程序Main()函数启动

    Public Module thisModule
        Sub Main()
            Dim userName As String = InputBox("What is your name?")
            MsgBox("User name is" & userName)
        End Sub
        ' Insert variable, property, procedure, and event declarations.
    End Module

    在Module中创建了一些全局变量和函数,调用这些变量和方法的时候不用New。

    Imports System
    Imports System.IO
    
    Public Module MyModule
        '定义全局变量
        '登陆的用户名和密码
        Public LoginID As String
        Public LoginPwd As String
    
        Public Sub AddOne(ByVal n As Integer)  '这里是函数AddOne的定义
            Console.WriteLine(n + 1)
        End Sub
    
        '函数是有返回值的。我们写一个函数,传入一个整数,函数返回这个数的加二。例如给它3,它返回5。
        Public Function AddTwo(ByVal n As Integer) As Integer
            Return n + 2        'return后面的表达式就是这个函数要返回的东西
        End Function
    
    End Module
    
    

    展开全文
  • VB.NetHOOK的使用方法

    千次阅读 2012-07-13 16:23:25
     一、先来看一下在vb中是如何实现  截是空格键。表现目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:“HOOK...
    由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析。

      一、先来看一下在vb中是如何实现的

      截的是空格键。表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:“HOOK成功!”

      1.在一个Module中写入下列代码:

      调用的API的申明:

    Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

      函数说明:本函数是用于启动Hook设置。

      idHook是Hook的类型,即处理的消息类型。

      Lpfn是Hook子程(函数或过程)的地址指针。如果dwThreadId参数为0或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的Hook子程。除此以外,lpfn可以指向当前进程的一段Hook子程代码(我们利用的就是这个性质)。

      hMod是应用程序实例的句柄,标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。

      dwThreadId是与安装Hook子程相关联的线程的标识符,如果为0,Hook子程与所有的线程关联。 返回值:函数成功则返回Hook子程的句柄,失败返回NULL。

    Declare Function UnHookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

      函数说明: 本函数是解除Hook之用。hHook是Hook函数的句柄。

    Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

      函数说明:本函数的作用是将当前Hook链中的Hook信息传递给下一个Hook。

      hHook是当前Hook的句柄,一个应用程序接收这个句柄,作为先前调用SetWindowsHookEx函数的结果。

      nCode指的是传递到当前Hook过程的Hook代码,下一个Hook过程使用这段代码去决定如何处理Hook信息。

      wParam指传递给当前Hook过程的wParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

      lParam指传递给当前Hook过程的lParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

      2. 定义的常量是:

    Public hnextHookproc As Long

    Public Const WH_KEYBOARD = 2 ‘这个是表明Hook的种类是键盘Hook

    Public Const PM_KEY_SPACE = &H20 ‘空格键

      3.代码段

    Public Sub UnHookKBD()  ‘解键盘HOOK函数
     If hnextHookproc <> 0 Then
      UnHookWindowsHookEx hnextHookproc
      hnextHookproc = 0
     End If
    End Sub


    Public Function EnableKBDHook() ‘设置键盘HOOK
     If hnextHookproc <> 0 Then
      Exit Function
     End If

     hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, 0)

     If hnextHookproc <> 0 Then
      EnableKBDHook = hnextHookproc
     End If
    End Function


    Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

     MyKBHFunc = 0
     If iCode < 0 Then
      MyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)
      Exit Function
     End If

     If wParam = PM_KEY_SPACE Then ''偵測 有沒有按到空格鍵
      MyKBHFunc = 1
     ‘加入自己的代码,用于表明响应
      form1.text1.text=”Hook成功!”
     End If
    End Function

      4.在Form中的代码很简单:

    Private Sub Form_Load()
     Call EnableKBDHook
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
     Call UnHookKBD
    End Sub
      现在在form窗体状态下,敲空格键,就会响应你在MyKBHFunc函数中写的代码了。

      1. 新建一个module,先写一下API的声明:

    Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As HookType, ByVal lpfn As HOOKPROC, ByVal hmod As Integer, ByVal dwThreadId As Integer) As Integer

    Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Integer) As Integer

    Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer, ByVal ncode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
     
      和上面VB6里的声明比一下,你发现了什么?是不是数据类型发生了变化?integer代替了long。这个好理解,因为vb.net中integer定义为32位(4字节)的整数,值的范围是-231到231(首位是符号位),这与vb6中long的定义是一致的,因此,我们必须做一下这样的转换。

      等等,还有一个变化,就是SetWindowsHookEx的参数lpfn的类型变成了HOOKPROC,那……那是什么意思。噢,wait,我再补一句声明先:

    Public Delegate Function HOOKPROC(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

      看出来什么了吗?HOOKPROC其实就是一个函数声明,但是前面有一个Delegate(委托)是什么意思?为什么在vb.net中不能用integer表示lpfn的类型了呢?我们回头看一下vb6中调用API的句子:

    hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, 0)


      Lpfn在这里被表示为AddressOf MyKBHFunc,即说明Hook发生作用时,调用的子程是MyKBHFunc。也就是说lpfn表示的是函数或过程的地址。在vb6中用long类型就可以记录下函数或过程的地址。

      在vb.net中,有了一点小变化喽,AddressOf 运算符创建的是一个指向指定的子程的子程委托。当指定的子程是一个实例方法时,子程委托同时引用实例和方法,以便当调用该子程委托时,调用指定实例的指定方法。AddressOf 运算符可以用作委托构造函数的操作数,或可以用在编译器能够确定委托类型的上下文中。

      所以,正是由于Addressof创建的不再只是简单的函数指针了,而是子程委托!打住先,什么是委托?(^?^)

      解释一下:事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发(触发)事件的对象叫做事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。在事件通讯中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET 框架定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。看,这里提到了.net框架,所以C#等vs.net中的语言都可以有这个类型喽。

      委托就是可用于调用其他对象方法的对象。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。因为它们与其他编程语言中所使用的函数指针相似。但不同于函数指针,Visual Basic.NET 委托是基于 System.Delegate 类的引用类型,它可以引用共享方法—无需特定即可调用的方法—和实例方法。(具体内容请自已去查阅一下MSDN或等我的后续文章再说明)

     


      回过头来总结一下,也就是说,Addressof创建的是DelegateType(委托类型)。而不是简单的子程指针了,所以它的表示法就不是地址类型的long了,而是与调用的子程相一致的委托类型表示形式。因此,我定义了一个与MyKBHFunc声明同形的委托函数HOOKPROC来表示lpfn的类型。

      继续,我又接着声明了一个API:

    Declare Function GetCurrentThreadId Lib "kernel32" Alias "GetCurrentThreadId" () As Integer

      函数说明:本函数是用于获取当前线程一个唯一的线程标识符。返回值:当前的线程标识符。这个有什么用,一会再说,反正是个简单的问题,不如卖个关子,哈哈……(不要砸我)

      2. 定义的常量是:

    Public hnextHookproc As Long
    Public Const WH_KEYBOARD = 2 ‘这个是表明Hook的种类是键盘Hook
    Public Const PM_KEY_SPACE = &H20 ‘空格键

      或者,实际上也是,我在程序中对上面的第二句写法改变了一下,也没什么了,就是多交待一点东西给朋友们嘛:

    Public Enum HookType
     WH_KEYBOARD = 2
    End Enum

      定义成了一个枚举。其实Hook的种类真的很多,比如有:WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT 、WH_DEBUG、WH_GETMESSAGE等等。所以你不妨写一个枚举,以达到一劳永逸的目的。

      3. 代码段

    Module Module1

    Public frm1 As New Form1() ‘这个的作用,最后再说

     Declare Function GetCurrentThreadId Lib "kernel32" Alias "GetCurrentThreadId" () As Integer
     Declare Function SetWindowsHookEx Lib "user32" Alias _
    "SetWindowsHookExA" (ByVal idHook As Integer, ByVal lpfn As HOOKPROC, _
    ByVal hmod As Integer, ByVal dwThreadId As Integer) As Integer

     Declare Function UnhookWindowsHookEx Lib "user32" _
    (ByVal hHook As Integer) As Integer

     Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer, _
    ByVal ncode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

    Public Delegate Function HOOKPROC(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

     Public hnexthookproc As Integer
     Public Const PM_KEY_SPACE = &H20
     Public Enum HookType
     WH_KEYBOARD = 2
    End Enum


    Public Sub UnHook()  ‘解Hook
     If hnexthookproc <> 0 Then
      UnhookWindowsHookEx(hnexthookproc)
      hnexthookproc = 0
     End If
    End Sub

    Public Function SetHook() ‘设置Hook
     If hnexthookproc <> 0 Then
      Exit Function
    End If

    hnexthookproc = SetWindowsHookEx(HookType.WH_KEYBOARD, AddressOf MyKeyboardProc, 0, GetCurrentThreadId())

      我把第三个参数设为0(即NULL),表示的是此Hook的代码在此进程中。第四个参数用了一个API去取安装Hook子程相关联的线程的标识符。(参见前面的API声明)

    End Function

    Public Function MyKeyboardProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

    MyKeyboardProc = 0

    If nCode < 0 Then
     MyKeyboardProc = CallNextHookEx(hnexthookproc, nCode, wParam, lParam)
     Exit Function
    End If

    If wParam = PM_KEY_SPACE Then
     MyKeyboardProc = 1
     '写入你自己的代码
     frm1.textbox1.text=”HOOK成功!”
    End If

    End Function

    Sub main()
     Application.Run(frm1)
    End Sub
    End Module

      同时请在:

      解决方案管理器-〉windowsapplication1.sln -〉右点鼠标 -〉属性 -〉通用属性->常规->启动对象 -〉改为Module1

      4.在Form1中的代码:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Call SetHook()

    End Sub

    ‘vb.net中没有form_unload事件了,而是用closing

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

    Call UnHook()

    End Sub

      最后简单说明一下,为什么我在module1里用了Public frm1 As New Form1()这句话,及启动对象 -〉改为Module1的作法。这是由于vb.net已经是OO的了,如果你是yesky上vb.net版的常客,你就会很熟悉这个问题,我们已经讨论过N次了。

      结束语:关于API的调用,本文只涉及了冰山之一角,关于具体的调用变化,我会根据vb.net版上的具体情况再写相关的文章来说明的。

      对了,补充一点,vb.net不再认any类型了,因此,在声明时要具体声明成你想要用的类型即可。
    出处:http://www.lob.cn/jq/skill/1506_2.shtml
    展开全文
  • VB中变量可以分为3类:局部(Local)变量、模块(Module)变量及全局(Public)变量,其中模块变量包括窗体模块变量和标准模块变量。各变量位于不同层次。局部变量过程级变量只有在声明它们过程中才能被识别,它们又...

    变量的作用域指的是变量的有效范围。为了能正确地使用变量的值,应当明确可以在程序的什么地方访问该变量。VB中变量可以分为3类:局部(Local)变量、模块(Module)变量及全局(Public)变量,其中模块变量包括窗体模块变量和标准模块变量。各变量位于不同的层次。

    局部变量

    过程级变量只有在声明它们的过程中才能被识别,它们又称为局部变量。

    用Dim或者Static关键字来声明它们,两者的区别在于:在整个应用程序运行时,用Static声明的局部变量中的值一直存在,而用Dim声明的变量只在过程执行期间才存在。

    对任何临时计算来说,局部变量是最佳选择。例如,可以建立十来个不同的过程,每个过程都包含称作intTemp的变量(同一个变量名在不同的过程中意义可能不同)。只要每个intTemp都声明为局部变量,那么每个过程只识别它自己的intTemp版本。任何一个过程都能够改变它自己的局部的intTemp变量的值,而不会影响别的过程中的intTemp变量。

    模块变量

    按照缺省规定,模块级变量对该模块的所有过程都可用,但对其它模块的代码不可用。可在模块顶部的声明段用Private或Dim关键字声明模块级变量,从而建立模块级变量。例如:

    Private intTemp As Integer

    在模块级,Private和Dim之间没有什么区别,但Private更好些,因为很容易把它和Public区别开来,使代码更容易理解。

    全局变量

    为了使模块级的变量在其它模块中也有效,用Public关键字声明变量。公用变量中的值可用于应用程序的所有过程。和所有模块级变量一样,也在模块顶部的声明段来声明公用变量。例如

    Public intTemp As Integer

    注意:不能在过程中声明公用变量,只能在模块的声明段中声明公用变量。

    总结以上可知:声明语句有如下四种格式,这四种语句创建了不同特性的变量,下面来作详细的介绍:

    (I)Dim语句,其格式为:

    Dim<变量名>[As<数据类型>]

    程序运行时,上述声明在内存中为变量分配空间,并使Visual Basic了解随后要处理数据的数据类型。

    Dim语句用于在标准模块(Module)、窗体模块(Form)或过程(Procedure)中定义变量或数组

    用Dim语句在窗体的过程中声明的变量称为局部变量,其作用域仅局限在本过程内部,过程一旦执行完毕,其值也就消失了。

    例如

    Dim Number As Integer'声明Number为Integer(整型)变量。

    Dim I As Integer,j As Integer,k As Integer'同时声明为整型变量。

    Dim AnyValue,MyValue'AnyValue和MyValue按缺省情况被声明为Variant类型,同时值被设为Empty(空)。

    Dim AnotherVar, Choice As Boolean, BirthDate As Date'在一行中声明多种类型变量,AnotherVar为Variant类型,因为它的类型被省略了,Choice为布尔型变量,BirthDate为日期型变量。

    (2)Private语句.其格式为:

    Private<变量名>[As<数据类型>]

    如果要在一个窗体模块的所有过程中共享同一个变量,则应在这个窗体模块的声明段用Private语句进行声明.这种变量称为模块级变量,其作用域为整个窗体模块。这就好比是您家里的电话号码,它在您所在的城市是通用的,但出了这个范围就不能单独使用了。

    (3)Public语句,其格式为:

    Public<变量名>[As<数据类型>

    ]

    用来在标准模块中定义全局变量或数组。如果在标准模块的声明段中用Public关键字来声明模块级变量,那么这个变量的作用域是整个工程,即它会在整个工程的所有模块中有效,这种变量称为全局变量,也称公用变量。这就好比是加了邮政区号的电话号码,在全国范围内通用。

    (4)static语句.其格式为:

    static<变量名>[As<数据类型>·

    局部变量在过程执行结束后其值不能被保留下来,在每一次过程重新执行时,变量会被重新初始化。如果希望在该过程结束之后,还能继续保持过程中局部变量的值,就应该用static关键字将这个变量声明为静态变量。这样,即使过程结束,该静态变量的值也仍然保留着。

    例如我们可以为一个窗体编写下面这样一程序,可以对用户在窗体上单击的次数计数并用显示出来。

    Private Sub Form_click()

    Static

    I As IntegerI = I + 1Label1.Caption = IEnd Sub

    再如:

    Private Sub Command1_Click()

    Static IntCount As IntegerIntCount = IntCount + 1Select Case IntCountCase 1Command1.Caption = "春眠不觉晓"Case 2Command1.Caption = "处处闻啼鸟"Case 3Command1.Caption = "夜来风雨声"Case ElseCommand1.Caption = "花落知多少"IntCount = 0End Select

    End Sub

    将Static换成Dim,运行一下,连续单击窗体,两者结果的不同显而易见。

    注意:就像在过程中不能使用Public和Private关键字一样,在模块的声明段中不能使用static关键字,会报错。

    定义完变量,初值的问题:

    整数:0

    浮点数:0.0

    字符串:""

    Variant:Empty(保留字,关键字)不同与null,0,Nothing

    判断它有没有赋值,就看它的值是不是empty

    展开全文
  • 在学习过程中,我结合自己经验总结下VB中的一些高级应用,并且体会这种应用给我们所带来好处. 一、模块 (Module) 在VB中,模块会优先执行,其实说白了,模块就象是全局过程和函数调用.这是初步提高代码可...
  • VB.NET中的类和模块

    千次阅读 热门讨论 2015-12-20 10:13:52
    在三层的例子中,我是仿照这C#中的结构来实现的VB.NET版的三层,但是在这之中出现了一个问题,那就是好像C#中只涉及到了各种类的使用,没有用到模块(module),但是在VB中要调用一个类中的字符串的时候却是出现了不...
  • 什么是模块系统Java 9 最大变化之一是引入了模块系统...Java 9 模块重要特征是在其工件(artifact)根目录包含了一个描述模块 module-info.class 文 件。 工件格式可以是传统 JAR 文件或是 Java 9 新...
  • vb中findwindow疑惑

    2012-06-19 22:46:46
    目的是学习使用findwindow方法 |问题是程序运行得不到正确答案 步骤是 : 'Module Module1 //模块声明findwindowDeclare Function FindWindow Lib "User32" Alias "FindWindowA" ...
  • 打开Vb2005新建一工程,将Form1Text属性设置为“打开Excel文件”,把Form1更名为FrmOpenExcelFile.vb。2.点击“项目-添加模块”,添加一个Module1,输入如下代码: Module Module1 Public Mycon As System.Data....
  • 1.设置从Model中的Sub Main 启动2.程序结构3.Model1Imports System.Windows.Forms.ApplicationModule Module1Sub Main()'form1 是测试多文档窗口'Dim frm1 As New Form1()'frm1.Show()Dim formStudentSysMain As New...
  • vb6使用其他用户启动程序。 实例代码可以全部放在一个Module中。 参照如下: Private Const LOGON_WITH_PROFILE = &H1& Private Const LOGON_NETCREDENTIALS_ONLY = &H2& Private Const CREATE_DEFAULT...
  • '使用范围对象粘贴源XLS文件数据到合并结果文件 xlRange = xlSheet.Range(xlSheet.Cells(7, 1), xlSheet.Cells(nRows + 7, nCols)).ToString xlRange.Select() xlRange.Copy() xlNewBook.Sheets(i).Cells...
  • vb.net对数据库操作公共类

    千次阅读 2005-09-08 16:16:00
    在开发通过总结自己编写了一个关于数据操作公共类,在实际操作觉得使用起来非常方便。实现在module中定义。使用时直接调用即可这里数据连接采用sqlConnection一 数据连接 Public sqlconn As SqlClient....
  • VB改写C#

    2019-09-25 05:21:38
    1.VBVal()函数 先从程序集中引入Microsoft.VisualBasic命名空间。...Val函数位于Conversion类中,这个类(在VB中Module)中定义了Val、Hex、Str、Oct、Int、Fix等函数。 具体哪个函数在哪个类里可以在对象浏览...
  • VB实现人事管理系统源代码+数据库SQL Server2014+程序说明。 一、本系统由以下对象组成: 1.窗体 (1)AddUser:添加用户; (2)Backup:数据库备份; (3)delete_staff:删除职员数据; (4)Login:系统...
  • 思路是这样:在线程中使用threading.timer,1ms执行一次,使GLO_TICK++。Calculate_Interval 用来计算间隔时间。 实际上TimerTask不是1ms执行一次,这是为什么? ``` Module Module1 Class StateObjClass ' ...
  • 为了体现多线程运行特点,暂时使用控制台代码讲解,不使用窗体,请在新建项目时选中控制台应用程序。 确保在Module外添加: Imports System.Threading 为了简化讲解,请在sub main加入如下代码: Sub ...
  • vb6ToNet

    2007-04-10 17:29:00
    在升级过程中,如果用到象vb6.0窗口中调用,在项目设置中点中->启动应用程序框架,如果是使用module.vb中的sub Main(),点击取消就可以了。2、在日期格式下应该为"yyyyMMdd"才可以格式成功。Now.ToString("yyyy...
  • VB封装DLL文件讲解---3

    千次阅读 2013-12-04 09:20:03
    VB中的模块,类,ActiveX与API的使用 一、模块 (Module)  在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用。这是初步的提高代码可复用性的途径。有经验的ASP(VBSCRIPT,以后都只用...
  • 以下代码对于外接程序制作非常有用,注意:在DTE80下处理项目需要使用DTE7中的类,而不是DTE80。Imports SystemImports Microsoft.VisualStudio.CommandBarsImports ExtensibilityImports EnvDTEImports EnvDTE80...
  • VB6鼠标滚轮支持和代码格式化工具

    热门讨论 2010-04-11 22:53:53
    mwfix.exe用于使VB6编程环境支持鼠标滚轮,安装后打开VB6即可使用滚轮(VB6中原本是不支持滚轮,很不方便); smidt.exe用于使VB6编程环境支持代码格式化。安装后在VB环境点击右键将出现“Smart Indent”项,它可...
  • 在DotNetNuke 发布 04.09.01 StartKit,已经同时包含了VB.NET和C#DNN模块。可以参考我文章:DNN 04.09.01 StartKit中的新内容。 下载DotNetNuke C# Compiled Module Starter Kit for DNN 4.x 去...
  • VB应用一

    2007-10-16 00:49:00
    利用API中的“GetVolumeInformation”函数提取使用者机器硬盘序列号为特征码,注册时提交此码,经过软件著作权人加以运算,... 新建一模块文件 新建一模块文件,并将如下声明语句和常量添加到Module1.Bas模块
  • 1、新建DLL打开VB6–>文件–>新建工程–>选择ActiveX DLL–>确定2、将默认工程、类重命名工程重命名:工程–>工程1 属性(此名称对应窗体内工程项目名称)–>在...此段代码几乎适用于所有使用vb封装asp DLL组件,其
  • VB 2010 (32)泛型方法

    2020-04-12 10:22:48
    这些泛型方法例子都是在泛型类型(比如类、结构、接口)实现。 在普通类、结构、接口和模块也可以创建泛型方法。这时,类型参数不是在类、结构或者接口上指定,而是直接在方法上指定。 例如,声明一个判定...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

vb中module的使用