精华内容
下载资源
问答
  • 使用VB.NET控制台应用程序实现一个简单计算器 工具 VS2019 创建界面 一共使用了2种控件,显示数字是TextBox,各种按钮是Button。 注意事项 TextBox控件Multiline属性默认为false,如果要修改TextBox控件大小...

    使用VB.NET控制台应用程序实现一个简单的计算器

    工具

    VS2019

    创建界面

    就是一个非常简单的计算器

    一共使用了2种控件,显示数字的是TextBox,各种按钮是Button。

    注意事项

    TextBox控件的Multiline属性默认为false,如果要修改TextBox控件的大小,就需要将Multiline属性改为True。

    按钮事件

    设置三个全局变量
    分别用来记录计算器显示框中的输入数字
    到目前为止的计算结果
    以及记录所使用的运算符

        Dim num As Double = 0  
        Dim sum As Double = 0
        Dim f As String = ""
    

    数字按钮以1为例,其余数字代码基本类似

    	Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            num = num * 10 + 1
            TextBox1.Text = num
    	End Sub
    

    运算符号按钮以+为例,其余运算符号代码都相类似

        Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
            If (f = "") Then
                sum = num
            ElseIf (f = "+") Then
                sum = sum + num
            ElseIf (f = "-") Then
                sum = sum - num
            ElseIf (f = "*") Then
                sum = sum * num
            ElseIf (f = "/") Then
                sum = sum / num
            End If
            num = 0
            f = "+"
            TextBox1.Clear()
        End Sub
    

    最后等号的按钮事件为

        Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click
            If (f = "") Then
                sum = num
            ElseIf (f = "+") Then
                sum = sum + num
            ElseIf (f = "-") Then
                sum = sum - num
            ElseIf (f = "*") Then
                sum = sum * num
            ElseIf (f = "/") Then
                sum = sum / num
            End If
            num = 0
            f = ""
            TextBox1.Text = sum
            sum = 0
        End Sub
    

    这样就结束啦。刚刚开始学这个,希望慢慢进步哟。

    展开全文
  • 变量的作用域

    2016-05-25 22:17:14
    局部变量一全局变量  vb应用程序有3模块组成。即窗体模块、标准模块和类模块。窗体模块包括时间过程、通用过程、声明部分;而标准模块有通用过程声明部分组成。 三种变量

    局部变量一全局变量

         vb应用程序有3中模块组成。即窗体模块、标准模块和类模块。窗体模块包括时间过程、通用过程、声明部分;而标准模块有通用过程声明部分组成。




    三种变量



    展开全文
  • 1、VB中的窗体可以不用New直接通过窗体名称引用,因为应用程序级别,相当于模块全局变量自动有一个和窗体一样变量名,实际是引用这个全局变量 2、窗体模块级变量(也就是在窗体方法外变量)生命周期跟...

    1、VB中的窗体可以不用New直接通过窗体名称引用,因为应用程序级别,相当于模块全局变量自动有一个和窗体一样的变量名,实际是引用的这个全局的变量

    2、窗体模块级的变量(也就是在窗体方法外的变量)生命周期跟窗体变量一致,不会因为 Form_Unload 而释放,Form_Unload 释放的仅是窗体界面资源

    3、在窗体 UnLoad 之后,调用窗体任何已经释放的windows资源将会导致窗体重新 Load

    4、DoEvents(一般在循环中 会导致程序在为执行完当前过程的情况下相应窗体事件,导致窗体 Unload ,过程继续执行导致 窗体资源无法被完全释放,程序无法退出。

    5、解决办法:设置全局变量 gIsExit,用Sub main() 启动程序,程序启动后设置 gIsExit = False,当Form Unload 设置 gIsExit =true;DoEvents 执行完毕之后判断一下gIsExit ,if gIsExit then Unload me exit sub. 这样就可以正常退出了。

    转载于:https://www.cnblogs.com/jetmeng/archive/2010/07/10/1774848.html

    展开全文
  • VB图像处理,(二)二次线性插值的应用

    万次阅读 热门讨论 2004-12-31 02:27:00
    上次讲到了用DIB方法来获取图像的像素。从这次开始将如果运用已经得到的像素来处理图像。...程序中用到的API、数据类型、全局变量的定义请参考上一篇:《VB图像处理,(一)像素的获取和输出 》Public Sub ZoomImag

    上次讲到了用DIB方法来获取图像的像素。从这次开始将如果运用已经得到的像素来处理图像。
    图像插值放大的方法有很多,最主要的有二次线性插值和三次线性插值这两种。
    这次我把自己的程序中所用的二次线性插值的算法公布给大家,希望对各位要使用VB写类似程序的朋友有所帮助。
    程序中用到的API、数据类型、全局变量的定义请参考上一篇:
    《VB图像处理,(一)像素的获取和输出 》

    Public Sub ZoomImage(ByVal OutPutWidth As Long, ByVal OutputHeight As Long)
    Dim I As Long
    Dim L As Long
    Dim X As Long
    Dim Y As Long
    Dim Xb As Long
    Dim Yb As Long
    Dim Xe As Long
    Dim Ye As Long
    Dim M As Integer
    Dim N As Integer
    Dim CurR As Long
    Dim CurG As Long
    Dim CurB As Long
    Dim NxtR As Integer
    Dim NxtG As Integer
    Dim NxtB As Integer
    Dim DR As Single
    Dim DG As Single
    Dim DB As Single
    Dim DRt As Single
    Dim DGt As Single
    Dim DBt As Single
    Dim Xratio As Single
    Dim Yratio As Single
    Dim CurStep As Single
    Dim NxtStep As Single
    Dim NegN As Single

    On Error GoTo ErrLine
    If Not CanZoom Then Exit Sub
    Done = False

    OutPutWid = OutPutWidth - 1
    OutPutHei = OutputHeight - 1
    I = (Bits / 8) - 1
    ReDim ColTmp(I, InPutWid, OutPutHei) '先从Y方向进行缩放处理,结果保存在此中间数组内
    ReDim ColOut(I, OutPutWid, OutPutHei)
    Xratio = OutPutWid / InPutWid
    Yratio = OutPutHei / InPutHei

    TimeZoom = timeGetTime

       NegN = 1 / Int(Yratio + 1)
       For X = 0 To InPutWid
          CurR = ColVal(0, X, 0)
          CurG = ColVal(1, X, 0)
          CurB = ColVal(2, X, 0)
          CurStep = 0
          NxtStep = 0
          For Y = 0 To InPutHei - 1
             NxtStep = CurStep + Yratio
             Yb = CurStep
             Ye = NxtStep
             N = Ye - Yb
             ColTmp(0, X, Yb) = CurR
             ColTmp(1, X, Yb) = CurG
             ColTmp(2, X, Yb) = CurB
             M = Y + 1
             NxtR = ColVal(0, X, M)
             NxtG = ColVal(1, X, M)
             NxtB = ColVal(2, X, M)
             If N > 1 Then
                DRt = (NxtR - CurR) * NegN
                DGt = (NxtG - CurG) * NegN
                DBt = (NxtB - CurB) * NegN
                DR = 0
                DG = 0
                DB = 0
                For L = Yb + 1 To Ye - 1
                   DR = DR + DRt
                   DG = DG + DGt
                   DB = DB + DBt
                   ColTmp(0, X, L) = CurR + DR 
                   ColTmp(1, X, L) = CurG + DG 
                   ColTmp(2, X, L) = CurB + DB 
               Next
             End If
             CurStep = NxtStep
             CurR = NxtR
             CurG = NxtG
             CurB = NxtB
          Next
          ColTmp(0, X, OutPutHei) = NxtR
          ColTmp(1, X, OutPutHei) = NxtG
          ColTmp(2, X, OutPutHei) = NxtB
       Next

       NegN = 1 / Int(Xratio + 1)
       For Y = 0 To OutPutHei
          CurR = ColTmp(0, 0, Y)
          CurG = ColTmp(1, 0, Y)
          CurB = ColTmp(2, 0, Y)
          CurStep = 0
          NxtStep = 0
          For X = 0 To InPutWid - 1
             NxtStep = CurStep + Xratio
             Xb = CurStep
             Xe = NxtStep
             N = Xe - Xb
             ColOut(0, Xb, Y) = CurR
             ColOut(1, Xb, Y) = CurG
             ColOut(2, Xb, Y) = CurB
             M = X + 1
             NxtR = ColTmp(0, M, Y)
             NxtG = ColTmp(1, M, Y)
             NxtB = ColTmp(2, M, Y)
             If N > 1 Then
                DRt = (NxtR - CurR) * NegN
                DGt = (NxtG - CurG) * NegN
                DBt = (NxtB - CurB) * NegN
                DR = 0
                DG = 0
                DB = 0
                For L = Xb + 1 To Xe - 1
                   DR = DR + DRt
                   DG = DG + DGt
                   DB = DB + DBt
                   ColOut(0, L, Y) = CurR + DR
                   ColOut(1, L, Y) = CurG + DG 
                   ColOut(2, L, Y) = CurB + DB 
                Next
             End If
             CurStep = NxtStep
             CurR = NxtR
             CurG = NxtG
             CurB = NxtB
          Next
          ColOut(0, OutPutWid, Y) = NxtR
          ColOut(1, OutPutWid, Y) = NxtG
          ColOut(2, OutPutWid, Y) = NxtB
       Next

    Done = True
    TimeZoom = timeGetTime - TimeZoom
    CanPut = True
    Exit Sub
    ErrLine:
    MsgBox Err.Description
    End Sub

    全局变量定义:
    Dim ColTmp() As Byte      '用于保存插值中间变量
    Dim OutPutHei As Long    '要插值的目标高度
    Dim OutPutWid As Long   '要插值的目标宽度
    Public TimeZoom As Long '插值运算使用的时间

    简单解释一下关于二次线性插值算法。
    (为了说明算法本身,我们只计算这个图片的红色分量,因为红绿蓝三种颜色的计算方法完全相同)
    假设我们有一个很简单的图片,图片只有4个像素(2*2)
    A  B
    C  D
    现在我们要把这个图片插值到9个像素:3*3
    A    ab      B
    ac   abcd   bd
    C    cd      D
    其中大写的字母代表原来的像素,小写字母代表插值得到的新像素。
    想必看到这个图,大家心里已经有了这个算法了。
    ab=(A+B) / 2 
    cd=(C+D) / 2
    ac=(A+C) / 2
    bd=(B+D) / 2
    abcd=(ab+cd) / 2=(A+B+C+D) / 4
    推导:ab= A + (B-A) / 2
                cd=C +(D-C) / 2
                ...
    很简单,对吧,先从一个方向把只涉及两个原始像素的新像素算出来。我们这里假定先计算水平方向。
    而在算垂直方向的插值的时候,因为ab和cd已经在前面算好了,所以abcd的计算也和计算ac和bd没有任何区别了。

    有可能为有朋友已经想到把原来的图像插值到4*4或5*5的方法了。
    A      ab1           ab2              B
    ac1   ab1cd11   ab2cd21       bd1
    ac2   ab1cd12   ab2cd22       bd2
    C      cd1           cd2               D

    推导:ab1 = A + (B-A) * 1 / 3 
                ab2 = A + (B-A) * 2 / 3 =ab1+(B-A) / 3
                cd1 = C + (D-C) * 1 / 3
                cd1 = C + (D-C) * 2 / 3 =cd1+(D-C) / 3
                ... 
    以A和B为例,先求出原始像素的差(A-B)再算出每一步的递增量(A-B) / 3
    然后每一个新的点就是在前面那个点的值加上这个递增量就是了。

    这里我们假设A=100, B=255 放大倍率为3,水平方向插值
    先计算出原始像素的差:(B-A) = 255-100 =155

    再计算出水平方向每一步的递增量:(A-B) / 3=155 / 3 = 51.7
    这里我们用一个变量DRt来记录这个递增量(这里只用红色来做例子)
    ab1 = A + DRt = 100+51.7 =151
    ab2 = ab1 + DRt = 151+51.7 = 202

    好了,其实二次线性算法就是这么一个东西,并不复杂。
    或许有写朋友会对于我给出的代码产生疑问。很简单的一个算法为什么要写这么多代码。

    其实答案很简单:为了提高速度。

    在VB中“+”和“-”永远是最快的,“*”要比“/”和“/”快。不论是什么类型的变量都是这样的。

    下面再来分析一下我的程序。
    在我的程序中把两个方向的插值分解成了两个单独的部分。

    先把
    A B
    C D
    变成:
    A ab1...abN B
    C cd1...cdN D
    再变成
    A      ab1...abN    B
    ac1    .............     db1
    ...       ............      ...
    acN  ..............      bdN
    C      cd1...cdN    D
    这两个方向的插值算法完全相同

    而Xratio 和Yratio 这两个变量则用来记录水平方向和垂直方向的放大倍率。
    所以这个过程也能够让图像缩放不按照原始的纵横比进行。

    好了,将这个模块和全局变量添加到上次建立的工程模块中。
    把按钮中的代码改成:
    sub command1_click()
    With picture1
       .ScaleMode=3
       .BorderStyle=0
       DibGet .hdc ,0 , 0 , .scalewidth , .scaleheight
       ZoomImage , .scalewidth * 2 , .scaleheight * 2
    End With
    picture2.AutoRedraw=True
    DibPut picture2.hdc
    picture2.refresh
    end sub
    图像是否已经放大到原来的两倍了呢?速度不算很慢吧?
    什么?很慢?先编译成EXE再运行吧。下面是效果图:

    原图:

    二次线性插值放大5倍:

    关于二次线性插值就说到这里了,下一次将说一些基本的滤镜效果:锐化、柔化、扩散、雕刻
    请大家继续关注

    其他文章:


    VB图像处理,(一)像素的获取和输出

     

    (这里只是说了我自己在写程序的时候用到的方法,存在很多的不足。并且因为在贴上来的时候作了部分修改,可能会存在部分错误,请各位高手不吝赐教,将您用到的更好的方法提供一下,我将不胜感激。)

     

     

     

     

    VB图像处理,(二)二次线性插值的应用

    VB图像处理,(三)几个常用滤镜的实现1

    VB图像处理,(四)几个常用滤镜的实现2

    VB图像处理,(五)图像的色彩纠正 
     

    VB图像处理,(六)图像的亮度对比度调整

     

    VB图像处理,(七)一种邻近均值滤波器的算法介绍(去尘,去噪音)

    展开全文
  • VB.net应用技巧3: UDP程序设计

    千次阅读 2017-02-02 13:01:27
    本文介绍在VB.net,进行UDP通讯程序设计方法。  在VB.net,进行UDP程序设计比较简单。程序除了初始化部分外,主要分为2个部分... 2、设置在整个项目全局有效的变量,用于线程结束。    3、在窗
  • VB 中的类模块与模块之一

    千次阅读 2005-12-28 15:43:00
    类模块是扩展Type,除了属性外还有方法事件而模块可以有全局(Public)变量全局(API、常数、类型)申明、过程可将那些与特定窗体或控件无关代码放入另一类型模块— 标准模块(文件扩展名为 .BAS )。...
  • vb.net对数据库操作公共类

    千次阅读 2005-09-08 16:16:00
    在开发通过总结自己编写了...使用时直接调用即可这里数据连接采用sqlConnection一 数据连接 Public sqlconn As SqlClient.SqlConnection 全局变量,供整个应用程序使用 Sub open_conn() Dim sqlconnStr As String
  • VB不同模块过程调用、菜单编辑

    千次阅读 2010-12-14 20:53:00
    彼此独立 动态变量:使用Dim声明局部变量,执行到该变量所在过程,才分配空间 静态变量:使用Static声明局部变量和全局变量,每次执行过程不释放空间,保持上次值不变 调用窗体中的过程,...
  • 我们知道,VB中所有代码都是依附于模块,而模块在VB中可以分为3种类型:窗体模块、标准模块和类模块。窗体模块我们在VB入门教程中已经学习过了。本节课程我们在来一起学习标准模块和类模块。标准模块标准模块是...
  • 变量的声明 (1) 显式声明 格式: Dim|Private|Public| Static <变量名> [As <类型>] 说明 Dim: 在窗体模块标准模块或过程声明变量 Private: 在窗体模块或标准模块声明变量使变量仅在该模块有效 Public: 在标准...
  • VB一些常用控件集,以及一些方法模块,编辑框.ctl、进度条、全局热键钩子、网站服务器、托盘控件、WinSock.ctl、曲线图.ctl、压缩算法-升级版.cls、数组加解密.cls、打开文件属性面板.bas等,其中一个模块部分代码...
  • 可用来在VB,VC驱动摄像头,进行静帧捕捉DLL动态链接库(必须要有摄像头生成StillCap0000.bmp):将MyDll文件解压后把MyDll.dll与MyDll.lib一起拷入工程DEBUG目录(为保险起见DEBUG外层目录也拷贝一份吧),...
  • VB常用术语释义

    2008-01-01 21:47:00
    VB常用术语释义 1.项目(Project):是用户创建文件集合,这个集合包括用户Windows 应用程序。2.控件(Control):是Toolbox窗口用户置于窗体上工具,用于配合用户控制程序流程。...5.全局变量(Global Variabl
  • 常用术语 项目(Project):是用户创建文件集合,这个集合包括用户Windows 应用程序。 控件(Control):是Toolbox窗口用户置于窗体上工具,用于配合...全局变量(Global Variable):就是在整个模块内或整个应...
  • VB常用术语

    千次阅读 2004-09-12 17:54:00
    项目(Project):是用户创建文件集合,这个集合包括用户Windows 应用程序。控件(Control):是Toolbox窗口用户置于窗体上工具,用于配合...全局变量(Global Variable):就是在整个模块内或整个应用程序内均可使用
  • 最近忙着把一个项目有B/S架构 变成 C/S架构,由于本人是B/S出身,对C/S不是很熟,就摸索着做,...一、C#中的全局变量 C#没有了像VB.Net中的全局变量,那么我们如何实现在不同页面间传递参数呢?下面举例说明如何实
  • 看陈伟视频有一段时间了,受益于之前打百例经过,百例一些不清楚地方在视频中的到了解决,但还是漏下了很多,在今后学习会补充上。下面是记录一些点,有点散,就先放这儿了: 1、声明变量: Dim ...
  • 状态的准确定义 在单用户程序,创建一个可执行的应用程序时,例如使用VB建立一个.exe文件,可以声明一个全局(或Public)变量,然后在代码任何地方可对其进行访问。在应用程序运行的所有时刻,时刻值一直是...
  • MATLAB混合编程与工程应用.pdf

    热门讨论 2010-05-19 10:32:48
    9.3 运用MATLAB 的全局变量进行数据转换190 9.4 将M 函数打包为.NET 组件192 9.5 进一步理解数据转换199 9.6 应用实例200 9.6.1 基于C#环境200 9.6.2 基于Visual Basic.NET 环境206 第10 章 MATLAB Web Server211 ...
  • 30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....
  • vc++ 应用源码包_5

    2012-09-15 14:45:16
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件导入和导出操作 主要实现在CMyExcel类。 expclass_src dll库演示。 ...
  • vc++ 应用源码包_4

    2012-09-15 14:38:35
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件导入和导出操作 主要实现在CMyExcel类。 expclass_src dll库演示。 ...
  • vc++ 应用源码包_3

    2012-09-15 14:33:15
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件导入和导出操作 主要实现在CMyExcel类。 expclass_src dll库演示。 ...
  • vc++ 应用源码包_1

    2012-09-15 14:22:12
    DOM应用---遍历网页中的元素 dshowplayer 媒体播放器实现,实现了VMR7、VMR9、EVR方式。 DSoundManager 实现了声音管理。 Excel文件导入和导出操作 主要实现在CMyExcel类。 expclass_src dll库演示。 ...
  • 20.4.2 算术运算符的应用 20.4.3 表达式的应用 20.5 数据维护与触发器的应用 20.5.1 添加数据的实现 20.5.2 更新数据的实现 20.5.3 删除数据的实现 20.5.4 在VB.NET应用触发器20.6 小结第21章 VB 6.0与SQL Server...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    18.2 在 C #代码调用 C++和 VB 编写组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • C#微软培训资料

    2014-01-22 14:10:17
    18.2 在 C #代码调用 C++和 VB 编写组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

vb中全局变量的应用