精华内容
下载资源
问答
  • 以下不是vb中的事件是
    2021-06-12 18:25:22

    我有一个具有开始按钮的表单(允许用户根据需要反复运行进程),并且我想在表单加载时发送btnStart.Click事件,以便进程自动启动.

    我有btnStart.Click事件的以下函数,但我如何实际告诉Visual Basic’假装有人点击了按钮并触发此事件’?

    我试过非常简单,基本上可行.但是,Visual Studio给我一个警告变量’sender’在被赋值之前被使用,所以我猜这不是真正的方法:

    Dim sender As Object

    btnStart_Click(sender, New EventArgs())

    我也尝试过使用RaiseEvent btnStart.Click,但是会出现以下错误:

    ‘btnStart’ is not an event of ‘MyProject.MyFormClass

    Imports System.ComponentModel

    Partial Public Class frmProgress

    Private bw As BackgroundWorker = New BackgroundWorker

    Public Sub New()

    InitializeComponent()

    ' Set up the BackgroundWorker

    bw.WorkerReportsProgress = True

    bw.WorkerSupportsCancellation = True

    AddHandler bw.DoWork, AddressOf bw_DoWork

    AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged

    AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted

    ' Fire the 'btnStart.click' event when the form loads

    Dim sender As Object

    btnStart_Click(sender, New EventArgs())

    End Sub

    Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click

    If Not bw.IsBusy = True Then

    ' Enable the 'More >>' button on the form, as there will now be details for users to view

    Me.btnMore.Enabled = True

    ' Update the form control settings so that they correctly formatted when the processing starts

    set_form_on_start()

    bw.RunWorkerAsync()

    End If

    End Sub

    ' Other functions exist here

    End Class

    更多相关内容
  • VB事件大全

    2014-10-29 21:53:02
    Change 事件示例 本例在 TextBox 控件显示水平滚动条的 Value 属性的数值。要尝试这个例子,需创建一个带有 TextBox 控件及 HScrollBar 控件的窗体,然后将码粘贴到一个带有水平滚动条 (HScrollBar 控件) 和 ...
  • 编程必然要知道事件,比如单击按钮事件,然后编写当事件发生时的处理代码,VB.NET是怎样进行事件处理的呢?可否自定义事件呢?因扩展控件,使其列头增加全选全不选复选框并具备分页功能需要用到自定义事件,详见博文...

    测试环境:windows 7和Microsoft Visual Studio 2015

    编程必然要知道事件,比如单击按钮事件,然后编写当事件发生时的处理代码,VB.NET是怎样进行事件处理的呢?可否自定义事件呢?因扩展控件,使其列头增加全选全不选复选框并具备分页功能需要用到自定义事件,详见博文《VB.NET学习笔记:WinForm自定义DataGridView分页组合控件》、《VB.NET学习笔记:自定义控件之扩展DataGridViewColumnHeaderCell类增加CheckBox全选复选框》,所以拜读了多篇相关事件的博文,结合自己在编程中的使用情况,谈谈我对事件的一些认识。
    一、事件处理——把事件与处理事件的方法关联在一起
    新建一个Windows窗体应用程序项目,在窗体里拉入一个Button控件,将其Name属性值修改为BtnEvent1,Text属性值修改为“按钮1”,然后双击按钮,即可自动生成如下按钮单击事件处理代码:

        Private Sub BtnEvent1_Click(sender As Object, e As EventArgs) Handles BtnEvent1.Click
    
        End Sub
    

    当然也可以在代码窗口里,选择相应的项目名称,及其下相应的控件,就可以选择对应的事件,之后也会自动生成事件处理代码,如下图所示操作。
    添加事件处理过程
    代码比VB6.0里的事件处理代码多了一些内容:
    1、Handles BtnEvent1.Click:表明这个方法应处理BtnEvent1中的Click事件,Handles的目的就是把这个方法与Button类中的Click事件关联起来。
    2、(sender As Object, e As EventArgs) :两个参数sender和e。这是控件类定义的参数,如果参数不对将引发错误。
    参数sender和e到底是个啥呢?我们来测试一下,在事件处理代码中添加如下代码:

        Private Sub BtnEvent1_Click(sender As Object, e As EventArgs) Handles BtnEvent1.Click
            MessageBox.Show(sender.ToString)
            MessageBox.Show(e.ToString)
        End Sub
    

    调试代码,测试结果如图所示:
    sender参数
    e参数
    经在csdn中查询得知:sender参数表示发送者,此处表示按钮。e参数是MouseEventArgs类,继承自EventArgs类,就是将鼠标的动作信息封装在这个类的对象e中。这个对象描述了鼠标点击情况,比如在按钮的那个位置点下了鼠标。我自己也不是很懂,在这里做个记号吧!
    下面代码修改了事件处理的方法名:

    Private Sub Btn1_Click(sender As Object, e As EventArgs) Handles BtnEvent1.Click
            MessageBox.Show(sender.ToString)
            MessageBox.Show(e.ToString)
        End Sub
    

    BtnEvent1_Click修改成了Btn1_Click,如果在VB6.0是没有办法识别这个事件的,单击“按钮1”当然也不会执行此代码。但在vb.net中不影响事件的执行,说明在vb.net中,事件不再依赖方法名。
    我们在窗体中再拉入一个Button控件,将其Name属性值修改为BtnEvent2,Text属性值修改为“按钮2”,然后添加如下按钮单击事件处理代码:

        Private Sub BtnEvent2_Click(sender As Object, e As EventArgs) Handles BtnEvent2.Click
            MessageBox.Show(sender.ToString)
            MessageBox.Show(e.ToString)
        End Sub
    

    BtnEvent2_Click方法里代码与BtnEvent1_Click方法里的代码一模一样,参数也一样,只是关联的事件不同而已,我们可以这两个方法合成一个方法,然后关联到2个事件上:

        Private Sub BtnEvent1_Click(sender As Object, e As EventArgs) Handles BtnEvent1.Click, BtnEvent2.Click
            MessageBox.Show(sender.ToString)
            MessageBox.Show(e.ToString)
        End Sub
    

    Handles关键字可以关联多个事件,用逗号隔开每个事件,每个事件都会导致方法执行。在合并方法时要求每个事件的参数个数及类型必须相同。
    一个方法可以关联多个事件,当然一个事件也是可以引发多个方法。代码如下:

    Private Sub BtnEvent1_Click1(sender As Object, e As EventArgs) Handles BtnEvent1.Click
            Me.Label1.Text = Me.Label1.Text & Environment.NewLine & "方法:BtnEvent1_Click1"
        End Sub
    
        Private Sub BtnEvent1_Click2(sender As Object, e As EventArgs) Handles BtnEvent1.Click
            Me.Label1.Text = Me.Label1.Text & Environment.NewLine & "方法:BtnEvent1_Click2"
        End Sub
    
        Private Sub BtnEvent1_Click3(sender As Object, e As EventArgs) Handles BtnEvent1.Click
            Me.Label1.Text = Me.Label1.Text & Environment.NewLine & "方法:BtnEvent1_Click3"
        End Sub
    

    测试效果如下图所示:
    一个事件引发多个方法
    可见,单击“按钮1”时,每个关联的方法都被执行了。
    除了用Handles关键字关联事件与事件处理方法外,还可以用AddHandler关键字,请看下面代码:

        Private Sub BtnEvent1_Click(sender As Object, e As EventArgs) Handles BtnEvent1.Click
            RemoveHandler TextBox1.TextChanged, AddressOf TextBox1_TextChanged
            Me.TextBox1.Text = sender.ToString
            AddHandler TextBox1.TextChanged, AddressOf TextBox1_TextChanged
        End Sub
    
        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            MessageBox.Show("你修改了文本!")
        End Sub
    

    不管是在窗体修改或是编程修改TextBox控件文本都会引发TextChanged事件,上面代码可以先暂停引发该事件,使用到RemoveHandler关键字来把事件跟处理事件的方法分离。

    RemoveHandler TextBox1.TextChanged, AddressOf TextBox1_TextChanged
    

    之后要记得用AddHandler关键字重新将事件TextBox1.TextChanged跟TextBox1_TextChanged方法关联,要不然就真的再不也会引发TextBox控件的TextChanged事件了。

    AddHandler TextBox1.TextChanged, AddressOf TextBox1_TextChanged
    

    学习小结:
    (1)、把事件处理方法和事件关联的方式有两种:
    A、Handles关键字:只要关联某方法后,就会一直关联。我们称其为静态方式。
    B、AddHandler关键字:AddHandler可以在程序运行时动态的添加处理事件的方法,还可以用RemoveHanlder动态地删除处理事件的方法。
    (2)、一个事件可以关联多个方法,一个方法也可以关联多个事件。
    如果事件关联的方法不止一个时,引发事件就会执行全部关联的方法,我们无法干涉和终止,而且也不能预测执行方法的顺序。
    二、自定义事件
    在vb.net中事件可以看成为一种特殊的委托,也就是说可以将sub过程委托给事件,当触发事件时就会执行委托给该事件的sub。
    1、使用自定义事件的步骤
    (1)、声明事件
    事件由委托实现,所以应事先声明一个事件的委托。

        Public Delegate Sub CustomEventHandler(ByVal str As String) '声明一个事件的委托
        Public Event CustomEvent As CustomEventHandler '声明一个自定义事件CustomEvent
    

    也可以用简写,即上述声明等效于:

    Public Event CustomEvent(ByVal str As String) '声明一个自定义事件CustomEvent
    

    注意:声明事件可以带参数,但不能具有返回值、可选参数、ParamArray参数。也就是说不能将function函数委托给事件。
    (2)、触发事件
    使用RaiseEvent关键字来引发事件。
    注意:触发事件时传入的参数必须与声明事件时的参数类型以及个数都要相同。

        Public Sub RaiseCustomEvent(ByVal str As String) '定义触发事件的方法
            RaiseEvent CustomEvent(str) '触发事件
        End Sub
    

    (3)、编写处理事件的Sub方法
    我这里编写的方法名为talk,带一个参数,特别注意的是传入方法的参数必须与声明事件时的参数类型以及个数都要相同。

    Public Sub talk(ByVal str As String)
            Me.TextBox1.Text = str
        End Sub
    

    (4)、把事件和处理事件的方法关联在一起
    可以使用Handles关键字或AddHandler关键字,但使用Handles关键字一定要配合使用WithEvents关键字来声明事件所在的对象,如果不带WithEvents关键字不会报错,但若这个对象真的有事件,也不会引发;当然如果对象本身没有声明的事件,如果强行用WithEvents将会引发语法错误。所以WithEvents和Handles必须成对出现。
    2、WithEvents和Handles关联事件方法
    类代码:

    Public Class ClsCustomEvent '自定义类
        'Public Delegate Sub CustomEventHandler(ByVal str As String) '声明一个事件的委托
        'Public Event CustomEvent As CustomEventHandler '声明一个自定义事件CustomEvent
        Public Event CustomEvent(ByVal str As String) '声明一个自定义事件CustomEvent
        Public Sub RaiseCustomEvent(ByVal str As String) '定义触发事件的方法
            RaiseEvent CustomEvent(str) '触发事件
        End Sub
    End Class
    

    窗体代码:

    Public Class Form1
        Public WithEvents Custom As New ClsCustomEvent() '声明事件对象
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Custom.RaiseCustomEvent("Hello world") '执行ClsCustomEvent类中触发CustomEvent事件的方法
        End Sub
    
        Public Sub talk(ByVal str As String) Handles Custom.CustomEvent '将talk方法委托给ClsCustomEvent类的CustomEvent事件
            Me.TextBox1.Text = str
        End Sub
    End Class
    

    3、AddHandler关联事件方法
    事件所在的类代码:

    Public Class ClsCustomEvent '自定义类
        'Public Delegate Sub CustomEventHandler(ByVal str As String) '声明一个事件的委托
        'Public Event CustomEvent As CustomEventHandler '声明一个自定义事件CustomEvent
        Public Event CustomEvent(ByVal str As String) '声明一个自定义事件CustomEvent
        Public Sub RaiseCustomEvent(ByVal str As String) '定义触发事件的方法
            RaiseEvent CustomEvent(str) '触发事件
        End Sub
    End Class
    

    窗体代码:

    Public Class Form1
        Public Custom As New ClsCustomEvent() '声明事件对象
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            AddHandler Custom.CustomEvent, AddressOf talk '将talk方法委托给ClsCustomEvent类的CustomEvent事件
            Custom.RaiseCustomEvent("Hello world") '执行ClsCustomEvent类中触发CustomEvent事件的方法
        End Sub
    
        Public Sub talk(ByVal str As String)
            Me.TextBox1.Text = str
        End Sub
    End Class
    

    注意: AddHandler与RemoveHandler最好能成对出现,如果不将事件处理程序与事件分离(RemoveHanlder),对象将保留在内存中,即使上面Custom不再指向对象,每个事件仍有对象的一个引用,容易出现内存泄露。而WithEvents会自动处理这些细节。

    本文借鉴与参考了以下博文:
    VB.net学习笔记(七)对象事件的定制
    vb.net中的委托与事件
    学习过程得到网友uruseibest的帮助,表示感谢!

    展开全文
  • VB事件大全.doc

    2022-06-22 09:39:34
    VB事件大全.doc
  • 1) MSHFLEXGRID的重要属性.MSHFLEXGRID...下面列出常用的属性,方法事件及其简要说明.以便查阅.属性 类型 说明AllowBigSelector Boolean 返回/设置一个值,定义当在行或列的头部单击时,是否该行或列将整个被选中Allow...

    1)  MSHFLEXGRID的重要属性.

    MSHFLEXGRID的属性非常多,其实绝大部分的属性和网格的显示的外观有关.在MSDN里,这些属性足以将人搞得眼花缭乱的了(我相信你没有耐性一个一个地翻查).

    下面列出常用的属性,方法事件及其简要说明.以便查阅.

    属性 类型 说明

    AllowBigSelector Boolean 返回/设置一个值,定义当在行或列的头部单击时,是否该行或列将整个被选中

    AllowUseResizing Enum 设置/返回一个值,定义用户是否可以调整网格行,列的尺寸

    BackColor Ole_Color 设置/返回一网格中非固定单元的背景色

    BackColorBand Array/Ole_Color 设置/返回网格中每个独立BAND的背景色

    BachColorBkg Ole_Color 设置/返回网格的背景色(单元头部除外)

    BackColorFixed Ole_Color 设置/返回网格中固定单元的背景色

    BackColorHeader Array/Ole_Color 设置/返回网格头部单元的背景色

    BackColorIndent Array/Ole_Color 设置/返回网格中凹痕部分的背景色

    BackColorSel Ole_Color 设置/返回网格选中单元的背景色

    BackColorUnpopulated Ole_Color 设置/返回网格非用户操作区的背景色

    BandData Array/Long 为独BAND设置/返回任意的值,以合在代码中通过这些值确定BAND

    BandDisplay Enum 定义在网格中BAND是水平还是垂直显示

    BandExpandable ARRAY/BOOLEN 设置/返回值指明独立的BAND能否被折叠或展开

    BandIndent Array/Long 定义BAND划分的字段数量

    BandLevel Long 返回当前的单元包含的BAND总数量

    Bands Long 返回网格中BAND总数量

    CellAlignment Integer 设置/返回一个值以定义当前单元的水平和垂直对齐方式

    CellBackColor Ole_Color 定义当前单元的字体是否为粗体

    CellFontBold Boolean 定义当前单元的字体是否为粗体

    CellFontItalic Boolean 定义当前单元的字体是否为斜体

    CellFontName String 定义当前单元的字体名

    CellFontSize String 定义当前单元的字体大小

    CellFontStrikeThough Boolean 定义当前单元的字体是否为突显示

    CellFontUnderline Boolean 定义当前单元的字体是有下划线

    CellFontWidth Single 定义当前单元的字体宽(用点表示)

    CellFontColor Ole_Color 设置/返回当前单元格的前景色

    CellHeight Long 设置/返回当前单元格的高度

    CellLeft Long 返回当前单元格的左边距

    CellPicture StdPicture 设置/返回当前单元格的图片

    CellPictureAlignment Integer 设置/返回当前单元格或某范围的单元格的图像对齐方式

    CelltextStyle Enum 设置/返回当前单元或选中范围单元文本的3D风格

    CellTop Long 返回当前单元格的垂直位置

    CellType Enum 设置/返回当前单元格的类型(标准.固定)

    CellWidth Long 返回/设置当前的单元的宽度

    Clip String 设置/返回网格选定范围单元的内容

    Col Array/Integer 设置/返回当前单元的水平坐标

    ColAlignment Array/Integer 设置/返回当前列的对齐方式

    ColalignmentBand Array/Integer 设置/返回BAND数据列的对齐方式

    ColAlignmentFixed Array/Integer 设置/返回固定单元数据的对齐方式

    ColAlignmentHeader Array/Integer 设置/返回固定头部单元数据的对齐方式

    ColData Ayyay/Long 为独立列设置/返回任意的值,以合在代码中通过这些值确定列

    ColHeader Array/Enum 定义每个BAND头部是否显示

    ColHeaderCaption Array/Single 定义每个BAND的列头部显示的文本

    ColIsVisible ARRAY/BOOLEN 返回/设置某个列是否可见

    ColPos Array/Long 返回某个给定列的左上角和网格左上角的距离

    Colposition Array/Long 设置网格列的位置

    Cols Long 返回/设置网格的列数量

    ColSel Array/Long 设置/返回某个范围单元的起始列

    ColWidth Array/Long 设置/返回某个列的宽度

    ColWordWrapOption Array/Integer 设置/返回网格的非固定单元是否允许WRAP

    ColWordWrapOptionBand Array/Integer 定义网格的BAND是否允许WRAP

    ColWordWrapOptionFixed Array/Integer 定义列的固定单元是否允许WRAP

    ColWordWrapOptionHeader Array/Integer 定义各头部是否允许WRAP

    DataField Array/Single 一个独立列绑定的数据库字段

    FillStyle Enum 定义改变文本或单元的其他属性是影响所有的选中单元还是只影响活动单元

    FixedCols Long 设置/返回固定列的列数

    FixedRows Long 设置/返回固定行的行数

    FocusRect Enum 定义控件对当前单元的焦点表示

    Font StdFont 返回/设置默认字体或各单元使用的字体

    FontBand Array/StdFont 设置/返回各BAND使用文本的字体

    FontFixed Single 设置/返回固定单元使用的字体

    FontHeader Array/StdFont 设置/返回各头部使用的字体

    FontWidth Single 设置/返回默认字体宽度

    FontWidthBand Array/Single 设置/返回BAND使用的字宽

    FontWidthFixed Single 设置/返回固定单元使用的字宽

    FontWidthHeader Array/Single 设置/返回每个头部使用的字宽

    ForeColr Ole_Color 设置/返回网格非固定单元使用的前景色

    ForeColorBand Array/Ole_Color 设置/返回网格各BAND的前景色

    ForeColorFixed Ole_Color 设置/返回网格固定单元的前景色.

    ForeColorHeader Array/Ole_Color 设置/返回网格头部单元的前景色

    ForeColorSel Ole_Color 设置/返回设置单元的前景色

    FormatString String 定义一个格式串用来设置网格列的宽度,对齐方式,固定行文本固定列文本

    GridColor Ole_Color 设置/返回网格单元间的线的颜色

    GridColorBand Array/Ole_Color 设置/返回网格BAND的线的颜色

    GridColorFixed Ole_Color 设置返回网格固定单元间的线的颜色

    GridColorHeader Array/Ole_Color 设置/返回网格头部间的线的颜色

    GridColorIndent Ole_Color 设置/返回网格INDENT单元间的线的颜色

    GridColorUnpopulated Ole_Color 设置/返回网格UNPOPULATED区域间的颜色

    GrigLine Enum 定义网格单元间的线的类型

    GrigLinesBand Array/Enum 定义网格各BAND间的线的类型

    GrigLinesFixed Enum 定义网格固定单元的线的类型

    GrigLinesHeader Array/Enum 定义网格各头部间的线的类型

    GrigLinesIndent Array/Enum 定义网格INDENT单元间的线的类型

    GrigLinesUnpopulated Enum 定义网格UNPOPULATED区域间的线的类型

    GrigLinesWidth Integer 设置/返回网格单元间的线的宽度

    GrigLinesWidthBand Array/Integer 设置/返回网格各BAND间的线的宽度

    GrigLinesWidthFixed Integer 设置/返回网格固定单元间的线的宽度

    GrigLinesWidthHeader Array/Integer 设置/返回网格各头间的线的宽度

    GrigLinesWidthIndent Array/Integer 设置/返回网格INDENT单元间的线的宽度

    GrigLinesWidthUnpopulated Integer 设置/返回网格UNPOPULATED区域间的宽度

    Hieght Enum 定义如何以及何时高亮度显示网格的选中单元

    LeftCol Long 网格最械的可见列

    MergeCells Enum 设置/返回一个值表明如何及何时将有相同内容的记录进行合并

    MergeCol ARRAY/BOOLEN 设置/返回一个值表明哪些列可以将内容合并

    MergeRow ARRAY/BOOLEN 设置/返回一个值表明哪些行可以将内容合并

    MouseCol Long 返回鼠标光标的列坐标位置

    MouseRow Long 返回鼠标光标的行坐标位置

    Picture StdPicture 返回MSHFLEXGRID的控件快照

    PictureType Enum 设置/返回PICTURE类型

    Redraw Boolean 设置/返回一个值,表明MSHFLEXGRIDR控件是否在每个改变后重画

    Row Long 设置/返回当前单元的垂直坐标

    RowData Array/Long 为各行设置/返回任意的值,以合在代码中通过这些值确定行

    RowExpandable Boolean 定义当前行是否可以展开

    RowExpanded Boolean 返回一个值表明当前行是否展开

    RowHeight Array/Long 设置/返回各行的高度

    RowHeightMin Long 设置/返回网格中行的最小高度

    RowIsVisible ARRAY/BOOLEN 设置/返回一个值,表明某个特定列是否可见

    RowPos Array/Long 返回给定行左上角和MSHFLEXGRID控件左上角的距离

    RowPosition Array/Long 设置某个网格行的位置

    Rows Long 返回网格的行的总数或者或BAND的行的总数

    RowSel Long 设置/返回一个范围的单元的起始行

    RowSizingMode Enum 设置/返回一个值表明对一行的设置是影响网格的所有行还是只影响被调整的行

    ScrollBars Enum 设置/返回一个值表明MSHFLEXGRID控件的滚动条类型

    ScrollTrack Boolean 设置/返回一个值表明网格内容是在用户移动滚动条时随着改变还是滚动结束后改变

    SelectionMode Enum 设置/返回一个值表明MFHFLEXGRID控件允许的选择类型.

    Sort Enum 根据某些村准备设置排序的值

    Text String 设置/返回一个单元或一个范围内单元的文本内容

    TextArray array/string 不改变ROW,COL属性,设置/返回任意单元的文本内容

    TextMatrix array/string 设置/返回某个选定行,列的单元的文本内容

    TextStyle Enum 设置/返回网格通常单元的3D文本风格

    TextStyleBand Array/Enum 设置/返回网格BAND的3D文本风格

    TextStyleFixed Enum 设置/返回网格各固定行的3D文本风格

    TextStyleHeader Array/Enum 设置/返回网格各头部的3D文本风格

    TopRow Long 设置/返回网格最上面的可见行

    Version Integer 返回正在使用MSHFLEXGRID控件的版本

    WordWrap Boolean 定义当到达单元的边界时,网格的单元的内容是否WRAP

    2)  MSHFLEXGRID控件的重要方法

    方法 说明

    AddItem 向网格中加入一新行

    Clear 清除网格中的内容

    ClearStructure 清除网格的结构(映射信息)

    CollapseAll 折叠网格的某个特定的所有行

    ExpandAll 展开网格的某个特定的所有行

    RemoveItem 从网格中清除一行

    方法AddItem和RemoveItem可以用来向网格中加入或删除行(BANDS).如果折叠或展开某个BAND的所有行,则可以使用COLLAPSEALL和EXPAANDALL方法.

    方法CLEAR可以清除网格中的内容,但不影响网格的行,列数,如果要清除网格的结构,包括顺序及网格各列的名称,应当使用ClearStructure方法.

    3)  MSHFELXGRID的控件的主要事件

    Collapse 用户折叠了网格的一行

    Compare 当SORT属性被设置为CUSTOMERSORT,允许用户定义排序过程

    EnterCell 当一个新的单元成为当前活动单元时

    Expand 用户展开了网格的一行

    LeaveCell 当一个新单元成为当前活动单元前

    RowColChange 当一个新单元成为当前活动单元时

    Scroll 用户用键盘,滚动条滚动网格的内容或网格的内容由程序滚动时

    SelChangeEvent 一个新范围内的单元被选中

    EnterCell, LeaveCell, RowColChange事件相互联系,因为字们都在当一个新单元成为当前活动单元时被激发,实际上这些事件的顺序是:LeaveCell, EnterCell然后是RowColChange.

    Collapse和Expand事件在用户折叠或者展开网格的一行(BAND)时被激发.属性ROW和COL可以用来确定用户折叠或者展开的单元.

    当SORT属性设置为9时,对网格的每两行发生一次COMPARE事件,用户排序方法使你可以选择按照午任意列或单元对行排序.注意,使用这种排序方式的速度会慢于BUILD-IN排序.

    不论采用何种方式,只要对网格进行滚动时,SCROLL事件就会被激发.当SCROLLTRACK属性设置为TRUE时,如果用户用鼠标拖动或滚动时,该事件也被激发,如果SCROLLTRACK属性被设置为FALSE时,SCROLL事件只在拖动结束后激发一次.

    当选择单元格变化时, SelChangeEvent事件会被激发,对选择的单元范围的改变,可以通过用户操作或程序代码来实现.

    1)  MSHFLEXGRID的编辑.

    关于MSHFLEXGRID的编辑,很多书都有介绍.一般都是用一个TEXTBOX作为的输入框,通过移动TEXTBOX来达到类似于EXCEL的编辑功能.很多书介绍的方法是在MOUSEDOWN或CLICK事件中移动TEXTBOX,然后,再在LeaveCell事件中写入.

    本文的方法与其有类似之处,但亦有小许不同,主要在写入网格时,在TEXTBOX的Change事件中写入.

    2)网格内容的保存与加载

    对于网格的保存,一般人喜欢使用.Clip属性,将整个网格一次性地写入一个文件中,当然,在文件不大时,这当然是一个好办法.但是,当网格达到几千行几万行时,这个方法好象不是很好.(各位如果有兴趣的话,可以试试下面的程序)

    ‘将网格设置成5000*12,然后用随机数填充网格.然后,调用下面程序

    Private Sub Command4_Click()

    Dim msgStr As String

    Dim FileID As Long

    Dim T1 As Date

    Dim T2 As Date

    T1 = Timer()

    With MSHFlexGrid1

    .Row = 0

    .Col = 0

    .RowSel = .Rows - 1

    .ColSel = .Cols - 1

    FileID = FreeFile

    msgStr = .Clip

    Open "C:\LX.TXT" For Output As #FileID

    Print #FileID, msgStr

    Close #FileID

    End With

    T2 = Timer()

    MsgBox T2 - T1

    End Sub

    反正我的感觉是:好象死机一般,要过一分多钟后计算机才能反应过来(实测是82.5秒左右,我的计算机是:AMD2500+,512M内存).

    为什么一次性的写入会如此的慢呢?这大概是有的人想不到的地方.其实,这跟VB处理字符串的机制有关,如果处理5K的字符串要一秒的话,那么,处理30K的字符串绝不是处理5K的6倍,而是长得多.这种关系几乎是呈某种几何级数的关系.

    明白了VB原来处理大字符串的效率原来是这么底.那么,解决的办法自然就有了.就是一个字:拆,将大拆小将会大大地加快处理字符串的速度.

    所以,下面的网格的保存函数的主要思想就将网格中的数据分步保存,每一次保存一小部分.直到整个网格保存完成.当然,其中还有一些细小的技巧,例如:保存时将先将网格中的行,列,固定行,固定列的总数保存,然后,保存各列的宽度,再然后正式保存数据.这都是为了加载的方便与快捷作了一定的处理.(参考下面的程序)

    Option Explicit

    Dim m_Row As Long

    Dim m_Col As Long

    Private Sub Command3_Click()

    '填充网格

    Dim R As Long

    Dim C As Long

    For R = 0 To MSHFlexGrid1.Rows - 1

    For C = 0 To MSHFlexGrid1.Cols - 1

    MSHFlexGrid1.TextMatrix(R, C) = R & C

    Next

    Next

    End Sub

    Private Sub Form_Load()

    With MSHFlexGrid1

    Text1.Visible = False

    .RowHeight(-1) = 285

    '设定网格是5000行.12列.

    .Rows = 5000: .Cols = 12

    End With

    End Sub

    '保存文件

    Private Sub Command1_Click()

    Call SaveFile(MSHFlexGrid1, "c:\kk.grd")

    End Sub

    '加载文件

    Private Sub Command2_Click()

    Call LoadFile(MSHFlexGrid1, "c:\kk.grd")

    End Sub

    Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

    Text1.Visible = False

    With MSHFlexGrid1

    m_Row = .MouseRow

    m_Col = .MouseCol

    If m_Row < .FixedRows Then m_Row = .FixedRows

    If m_Col < .FixedCols Then m_Col = .FixedCols

    .Row = m_Row: .Col = m_Col

    Text1.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight

    Text1.Text = .Text

    Text1.Visible = True

    Text1.SetFocus

    End With

    End Sub

    Private Sub Text1_Change()

    With MSHFlexGrid1

    .TextMatrix(m_Row, m_Col) = Text1

    End With

    End Sub

    '//**以下是相应的功能函数

    '

    '加载一个文件到表格.

    '函数:LoadFileToGrid

    '参数:MsgObj Mshfelxgrid控件名,FileName 加载的文件名

    '返回值:=True 成功.=True 失败.

    Public Function LoadFile(MsgObj As Control, FileName As String) As Long

    Dim InputID As Long, FileID As Long

    Dim EndRow As Long, DltAdd As Long

    Dim AddFlag As Boolean

    Dim KeyTab As String, KeyEnter As String

    Dim FixedRows As Long, FixedCols As Long

    Dim GridInput As String, AddSum As String, RowColMax() As String

    Dim GridColMax As Long, GridRowMax As Long

    Dim OleRow As Long, OleCol As Long

    Dim SumFmtStr As String

    Dim DltCol As Long

    On Error Resume Next

    With MsgObj

    .Redraw = False

    Err.Clear: SetAttr FileName, 0

    If Err.Number <> 0 Then '如果文件不存在

    Err.Clear

    Call SaveFile(MsgObj, FileName)

    .Redraw = True

    Exit Function

    End If

    KeyTab = Chr$(vbKeyTab): KeyEnter = Chr$(13)

    InputID = 0: AddSum = ""

    AddFlag = False: DltAdd = 25: DltCol = 1

    .Redraw = False: .FixedRows = 0: .FixedCols = 0

    FileID = FreeFile

    Open FileName For Input As #FileID

    Do While Not EOF(FileID) ' 循环至文件尾。

    Line Input #FileID, GridInput

    If InputID <= 1 Then

    '取出总行数和总列数,以及各列的宽度.

    If InputID = 0 Then

    RowColMax = Split(GridInput, "|")

    GridRowMax = CLng( "0" & RowColMax(0)): GridColMax = CLng("0" & RowColMax(1))

    If CLng( "0" & RowColMax(0)) < 2 Then GridRowMax = 1

    If CLng( "0" & RowColMax(1)) < 2 Then GridColMax = 1

    .Rows = GridRowMax: .Cols = GridColMax

    Else

    SumFmtStr = GridInput '格式字符串.

    End If

    Else

    If AddFlag Then

    AddSum = AddSum & KeyEnter & GridInput

    Else

    AddSum = GridInput: AddFlag = True

    End If

    If (InputID - DltCol) Mod DltAdd = 0 Then

    .Row = InputID - DltAdd - DltCol: .Col = 0

    .RowSel = InputID - 1 - DltCol: .ColSel = GridColMax - 1

    .Clip = AddSum: AddSum = ""

    EndRow = InputID - DltCol: AddFlag = False

    End If

    End If

    InputID = InputID + 1

    Loop

    If (InputID - DltCol) - EndRow > 1 Then

    .Row = EndRow: .Col = 0

    .RowSel = GridRowMax - 1

    .ColSel = GridColMax - 1

    .Clip = AddSum

    AddSum = ""

    End If

    Close #FileID

    Call FormatGrid(MsgObj, SumFmtStr)

    .FixedRows = CLng( "0" & RowColMax(2)): .FixedCols = CLng("0" & RowColMax(3))

    .Redraw = True

    .Row = .FixedRows

    .Col = .FixedCols

    .RowSel = .FixedRows

    .ColSel = .FixedCols

    End With

    End Function

    '

    '保存表格数据

    '函数:SaveFile

    '参数:MsgObj Mshfelxgrid控件名,FileName 加载的文件名

    '返回值:=True 成功.=True 失败.

    Public Function SaveFile(MsgObj As Control, FileName As String) As Boolean

    '/保存文件

    Dim FileID As Long, ConTents As String

    Dim A As Long, B As Long

    Dim RowMax As Long, ColMax As Long

    Dim FixRows As Long, FixCols As Long

    Dim OleRow As Long, OleCol As Long

    Dim SFmtStr As String

    Dim strColWidth As String

    On Error Resume Next

    With MsgObj

    .Redraw = False

    FixRows = .FixedRows: FixCols = .FixedCols

    RowMax = .Rows - 1: ColMax = .Cols - 1

    .FixedRows = 0: .FixedCols = 0

    FileID = FreeFile

    Open FileName For Output As #FileID

    ConTents = RowMax + 1 & "|" & ColMax + 1 & "|" & FixRows & "|" & FixCols & "|"

    Print #FileID, ConTents  '保存总的行数和列数.

    For A = 0 To .ColMax

    strColWidth = strColWidth & .ColWidth(A) & "|"

    Next

    Print #FileID, Left$(strColWidth, Len(strColWidth) - 1) '保存各列的宽度.

    For A = 0 To RowMax

    .Row = A: .Col = 0

    .RowSel = A: .ColSel = ColMax

    ConTents = .Clip

    Print #FileID, ConTents

    Next A

    Close #FileID

    .FixedRows = FixRows: .FixedCols = FixCols

    .Redraw = True

    End With

    SaveFile = (Err.Number = 0)

    Err.Clear

    End Function

    '格式网格:在这里是设置网格宽度.

    Function FormatGrid(MsgObj As Control, FmtStr As String)

    Dim I As Long

    Dim WithArr() As String

    WithArr = Split(FmtStr, "|")

    For I = 0 To UBound(WithArr)

    If IsNumeric(WithArr(I)) Then

    If Val(WithArr(I)) > 0 Then MsgObj.ColWidth(I) = CLng("0" & WithArr(I))

    End If

    Next

    End Function

    要按照内容自动调整列宽。只要适当地修改一下Text1_Change函数即可,如下:

    Private Sub Text1_Change()

    Dim OleWidth As Long

    Dim NewWidth As Long

    With MSHFlexGrid1

    .TextMatrix(m_Row, m_Col) = Text1

    .Text = Text1

    '根据输入自动调列宽

    NewWidth = Me.TextWidth(.Text)'新列宽

    OleWidth = .CellWidth         '旧列宽

    If NewWidth > OleWidth Then   '如果新列大于旧列,则将列宽设置为一个新值。

    .ColWidth(.Col) = NewWidth

    Text1.Width = NewWidth

    DoEvents

    End If

    End With

    End Sub

    编写一个类,首先在确定其功能。对某个控件功能的扩充,无非是增加一些原控件没有的属性和方法而已。只要你曾经设计过类或设计过控件,这些相对而言并不是很难。本文假定用户曾有个设计过一个简单类的经历。

    功能的提出:网格编辑,文件保存,文件加载,键盘的移动(用箭头,PAGEUP,PAGEDOWN实现向左,向下,翻页等),网格插入一行,网格插入一列,删除一行,删除一列,范围内删除内容,范围内删除列,范围内删除行。

    实现要点:对于网格的编辑,保存和加载。此不再叙述。对于键盘的移动,这里有一个难点。因为,我们并不能通过MSHFLEXGRID的滚动来移动当前表格,这里用到一个技巧,就是:移动编辑框到相应的网格即可实现滚动功能。对于插入行列等,其实思路非常简单,实质上就是内容的“搬运”。例如,要在当前行下插入一行,则将网格扩展一行,然后,将所有内容向下移动一行,再清空当前行。实现插入列也一样。仅上面将行变成列而已。关于范围内删除内容则更简单,清空即可。删除行可直接将选择的行删除(MSHFLEXGRID提供了相应的方法),删除列则麻烦一点。先将列内容前移,然后,重新设置网格的列数即可。

    由于程序比较长,所以,我也不能细述每部分的功能,而且,也可能存在BUG。当然,我既然有胆将这片药膏贴出来,致到运行上基本能通过了。

    下面的该类提供的属性和方法:

    **属性**

    BindGrid 绑定表格,如:SET BindGrid=Mshflexgrid1.(该属性是最重要的属性.必须首先设置)

    BindText 绑定文本框,如:SET BindText=ev_text.(该属性是最重要的属性.必须首先设置)

    BindPicture 绑定图片框,如:SET BindPicture=PictureBox1.(该属性是最重要的属性.必须首先设置)

    EditFixed 是否可以编辑固定行.

    EnterAction 回车键的行为

    EnterNextRow 如果是向右移到了网格的尽头,是否跳转下一行.(EnterAction=True)

    PageEnabled 是否可以翻页

    ArrowEnabled 是否可以用箭头移动编辑框.

    DltL 输入框左边距微调量

    DltT 输入框顶距边距微调量

    DltW 输入框宽度微调量.

    DltH 输入框高度微调量.

    AutoSize 当网格的行距或列距改变时,是否可以自动调整编辑框的位置.

    **方法**

    保存表格数据

    函数:SaveFile

    参数:FileName 加载的文件名

    返回值:=True 成功.=False 失败.

    加载一个文件到表格.

    函数:LoadFileToGrid

    参数:FileName 加载的文件名

    返回值:=True 成功.=True 失败.

    表格中添加一个新行

    函数:AddNewRow

    参数:无.

    返回值:无

    表格当前行前插入空行

    函数:InsertRow

    参数:InsRows 插入的空行数.

    返回值:

    在表格当前列前面插入列

    函数:InsertCol

    参数:InsCols 插入的列数.

    返回值:

    在表格未尾添加一列

    函数:AddNewCol

    参数:

    返回值:

    删除当前行

    函数:DelGridRow

    参数:

    返回值:

    删除当前列

    函数:DelGridCol

    参数:

    返回值:

    删除指定范围的行数

    函数:KillGridRows

    参数:StarRow 删除的开始行 ,EndRow 删除的结束行.

    返回值:

    删除指定范围的列数

    函数:KillGridCols

    参数:StarCol 删除的开始列 ,EndCol 删除的结束列.

    返回值:

    删除指定范围的内容

    函数:KillSelGrid

    参数:StarRow  删除的开始行,StarCol 删除的开始列 ,EndRow 删除的结束行 ,EndCol 删除和结束列.

    展开全文
  • 事件是可用特殊方式调用的方法——通常通过用户与窗体的控件交互或通过Widows本身——而不是在代码语句被直接调用 。 事件的类型有很多种,触发这些事件也有很多方式口。用户交互并非触发事件的唯一方式,可以...

           从某种意义上说,事件是一种特殊的方法,对象使用它来告知一些对客户(使用对象的代码)有用的状态变更。实际上,Visual Basic 2010文档经常将事件称为方法。事件是可用特殊方式调用的方法——通常通过用户与窗体中的控件交互或通过Widows本身——而不是在代码语句中被直接调用 。
           事件的类型有很多种,触发这些事件也有很多方式口。用户交互并非触发事件的唯一方式,可以通过下列4种方式来触发事件:

    •    用户与程序交互可以触发事件,例如,单击按钮将触发其Click事件; 
    •    对象在需要时可触发自己的事件,例如,定时器每隔一段时间触发其Timer事件;
    •    操作系统(不管用户运行的是哪个版本的Windows)可以触发事件;
    •    使用Visual Basic代码调用事件以触发它们,这与调用方法一样。

      VisualBasic将为事件创建一个事件过程。完整的事件声明如下:


        Private Sub picText MouseDown(ByVal sender As Object, Byval e As System.Windows.Forms.MouseEvantArgs) Handles picText.MouseDown 
            新事件的声明包含对象名和下划线。括号内的项称为参数。事件参数是一个变量,由Visual Basic创建并分配值。这些参数变量用于获取(有时也用于设置)事件内部的相关信息口这些数据可能是文本、数字或对象——几乎可以是任何东西。事件过程内的多个参数总是用逗号分开。可以看到,MouseDown事件有两个参数。事件过程被触发时,Visual Basic自动创建参数变量并为它们赋值,供在事件过程的这次调用中使用。下次事件过程发生时,参数的值将重新设置。在代码中可以根据这些参数的值来做作出判断或执行操作。

          ByVal的后面是参数名,而As后面的字符串指出了参数包含的数据类型。第一个参数sender存储一个通用对象。Object参数可以是Visual Basic支持的任何对象类型。不同参数变量包含不同类型的信息。有些包含文本,有些包含信信,还有有些(很多)包含对象。例如,sender参数将保存对引起事件的控件的引用。参数e则表明真正的行为在何处发生。参数e也存储一个对象,但这个对象是MouseEventArgs类型。这个对象有与MouseDown事件相关的属性。要查看这些属性,输入下列代码,但在点号后不要按任何键。输入点号后,将显示一个下拉列表,显示对象e的成员(属性和方法)。通过对象e,可以知道关于MouseDown事件的很多信息。

    System.Windows.Forms.MousaEventArgs的常用成员

            我们经常看到窗体中用来处理按钮的Click事件的代码,例如:
    Private Sub Buttonl Click  (ByVal sender As System.object, ByVal e As System.EventArgs) Handles Buttonl.Click
    End Sub

               Handles关键字明确表明这个方法应处理Buttonl控件中的Click事件。

            控件就是一个对像,因此这儿要表明的就是这个方法将处理Buttonl对象中的Click事件。

            Handles关键字提供了更多的灵活性口不仅可以任意选择方法的名称,如果需要,还可以让一个方法处理多个事件。唯一的要求是方法和所引发的事件必须具有相同的参数列表。

    Private Sub MyClickMethod (ByVal  s As  System.Object,  ByVal args As Sys七em.EventArgs) Handles Buttonl.Click
    End Sub
            即使改变了方法的名称和参数的名称,仍然可以接受相同数据类型的参数,因此可以用Handles子句表明该方法是用来处理该事件的。
            Handles关键字提供了更多的灵活性口不仅可以任意选择方法的名称,如果需要,还可以让一个方法处理多个事件。唯一的要求是方法和所引发的事件必须具有相同的参数列表。
    Private Sub MyClickMethod(ByVal sender As System.Object,ByVal e As System.EventArgs) _ 

          Hanciles ButtonI.Click,Button2.Click
    End Sub
    上面的Handles子句能处理用逗号隔开的事件列表。

            WithEvents关键字使对象中的任何事件都可利用,而Handles关键字将特定事件与方法链接起来,以便接收和处理它们。这适用于窗体中的控件,也适用于其他任何对象。
            使用WithEvents关键字不能声明不引发事件的变量类型。换而言之,如果Button类不包含引发事件的代码,在用WithEvents关键字声明变量时,会得到一个语法错误。
            通过检查接口,编译器可以确定哪个类能引发事件,哪个类不能引发事件。任何引发事件的类都会将该事件声明为接口的一部分。在visual Basic中,这就意味着要使用Event关键字至少将一个事件声明为类接口的一部分。
              对象可以像控件一样引发事件,使用对象的代码也能使用WithEvents和Handles关键字接收这些事件。不过,在引发对象的事件之前,需要使用Event关键字声明类中的事件。事件也可以有参数,参数值提供给接收事件的代码。声明了事件后,就可以在适当的地方引发事件。RaiseEvent关键字是用来引发实际事件。实际上,RaiseEvent语句会把事件(其对象是用WithEvents关键字声明的传递到用Handles子句指定的处理码  ,或者传递到使用AddHandler方法的代码中。

            如果接收事件的方法不止一个,每次就会将一个事件传递至一个接收器中。默认情况下,传递顺序没有定义——我们不能预测接收器接收事件的顺序,但事件必须传递到所有的处理程序中。注意,这是一个连续且同步的过程。每次都将事件传递到一个处理程序中,事件会在当前处理程序结束后,再传递到下一个处理程序中。一旦调用了RaiseEvent方法,事件就会一个接一个地传递到所有的侦听器中,直到结束——其间无法干涉并终止这个过程口

    声明和触发定制事件

           为了声明一个定制事件,需要先对委托进行简要介绍。委托指的足一个方法签名的定义。在声明事件时,Visual Basic将根据事件的签名在后台为该事件定义一个委托.例如,Walked事件的委托如下所示:

           Public Delegate Sub WalkedEventHandler(Byval distance As Integer)
          该代码声明的“方法”接受一个Integer参数并且没有返回值。这与事件的定义完全相同。声明WalkedEventHandler委托,就定义了—种自动跟踪事件处理程序的数据类型。
          在类中还需要声明一个变量,用于跟踪侦听事件或者处理事件的代码。
          Private mWalkedHandlers As WalkedEventHandler
          然后,可以使用该变量在定制事件声明中存储和触发事件:
          
         Public Custom Event walked As WalkedEventHandle
            AddHandler(ByVal value As WalkedEventHandle)
                mWalkedHandlers = CType([Delegate].Combine(mWalkedHandlers, value), WalkedEventHandle)
            End AddHandler

            RemoveHandler(ByVal value As WalkedEventHandle)
                mWalkedHandlers = CType([Delegate].Remove(mWalkedHandlers, value), WalkedEventHandle)
            End RemoveHandler

            RaiseEvent(ByVal distance As Integer)
                If mWalkedHandlers IsNot Nothing Then
                    mWalkedHandlers.Invoke(distance)
                End If
            End RaiseEvent
        End Event

    Custom Event声明是一个结构块,它包含3个子块:AddHandler、RemoveHandler和RaiseEvent。

          AddHandler块用于为接收事件添加一个新处理程序。传递给它的参数是一个对处理该事件的方法的引用。开发人员可以存储该方法引用。在上面的实现代码中,在委托变量中存储它,就像Visual Basic的默认实现代码一样。

          RemoveHandler块用于停止接收事件的某个事件处理程序。传递给它的参数是一个对处理该事件的方法的引用。开发人员可以删除该方法引用。在上面的实现代码中,我们重复了默认行为,通过委托变量来删除它。

          最后,每次触发事件都会调用RaiseEvent块。通常情况下,它在类的代码使用RaiseEvent语句时调用。传递给该块的参数必须与事件委托声明的参数相符。开发人员要检查处理事件的方法列表,调用每个方法。在上面的例子中,我们使用委托变量来处理,这与普通事件的默认行为相同。

    在客户端调用方法

    1.在类中实现事件代码

       Public Class Person
        '私有字段
        Private mName As String
        Private mBirthdate As Date
        Private mTotalDistance As Integer
        '声明事件
        Public Event Walked(ByVal distance As Integer)

        Public Sub Walk(ByVal distance As Integer)
            '用参数值使mTotalDistance的递增
            mTotalDistance += distance
            '触发事件
            RaiseEvent walked(distance)
        End Sub

    或声明定制事件

    Public Delegate Sub WalkedEventHandle(ByVal distance As Integer)
        Private mWalkedHandlers As WalkedEventHandle

        Public Custom Event walked As WalkedEventHandle
            AddHandler(ByVal value As WalkedEventHandle)
                mWalkedHandlers = CType([Delegate].Combine(mWalkedHandlers, value), WalkedEventHandle)
            End AddHandler

            RemoveHandler(ByVal value As WalkedEventHandle)
                mWalkedHandlers = CType([Delegate].Remove(mWalkedHandlers, value), WalkedEventHandle)
            End RemoveHandler

            RaiseEvent(ByVal distance As Integer)
                If mWalkedHandlers IsNot Nothing Then
                    mWalkedHandlers.Invoke(distance)
                End If
            End RaiseEvent
        End Event

    2.在客户端调用

    首先有WithEvent声明类实例

    Public Class Form1
        ' WithEvents关键字使对象中的任何事件都可利用,而Handles关键字将特定事件与方法链接起来,以便接收和处理它们。
        Private WithEvents mPerson As Person

    然后,在创建窗体时,创建一个对象实例口

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            mPerson = New Person
    End Sub

    现在编写方法,给窗体添加下列代码来处理对象中的Walked事件。该方法的名称可以随意取,但Handles子句很重要,使用Handles关键字可以表明该方法应处理哪个事件。因为它将对象中的事件直接链接到该方法上,所以在引发事件时会调用该方法:

    Private Sub OnWalk(ByVal distance As Integer) Handles mPerson.walked
            MsgBox("Peron walked " & distance)
    End Sub

        最后,需要在Person对象上调用Walk方法。给窗体添加一个按钮,并为Click事件编写以下代码:

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            mPerson.Walk(42)
        End Sub

        单击按钮时,就会调用Walk方法,传入一个Integer值。这会运行类中的代码,包括RaiseEvent语句。由于mPerson变量是用WithEvents关键字声明的,所以结果就是将事件引发回窗体,运行OnWalk方法来处理事件,因为Handles子句将它与事件相链接。

    展开全文
  • vb中OLE之WORD

    热门讨论 2011-05-04 15:35:30
    OLE(Object Linking and Embedding,对象链接与嵌入)使VB应用程序可以访问Windows环境其他应用程序的对象,例如Word文档、Excel工作表等,这类对象称为OLE对象。VB能够访问的OLE对象取决于用户系统所安装的...
  • 高中信息技术vb试题及答案...封装性2.VB 数据类型 Boolean表示布尔型,布尔型变量占( )字节。A.4 B.3 C.2 D.13.表达式 Cint(13.2/2)的结果是( )A.6.5 B.6 C.7 D.54.表达式 Len(String(6, “9“))的值是...
  • C#的多重委托和vb的多重委托 逻辑上是一样的,不过 写法还是有点不同的
  • VB中PictureBox控件使用教程.doc
  • VB基础教程.pdf

    2020-10-09 12:51:33
    环境搭建,VB教程,行业内最新资讯,优秀的教学资源,很多很详细的例子,非常有助于学习道路上前进,并且是最经典的例子,最经典的教材
  • VB6.0使用汇总

    2022-05-12 19:37:34
    VB6.0使用
  • vb之窗体关闭事件

    千次阅读 热门讨论 2014-11-25 19:28:59
    QueryUnload 事件  在一个窗体或应用程序...如果没有窗体取消 QueryUnload 事件,该 Unload 事件首先发生在所有其它窗体,然后再发生在 MDI 窗体。当一个子窗体或一个 Form 对象关闭时,在那个窗体的 QueryUnloa
  • VB初学者的福音
  • VB中sub和private是什么意思 Private Sub cmdFind_Click()说明发生了按钮的点击事件。 Private Sub是一个过程,并且是模块级的。过程没有返回值public是公有,类的方法或者变量可供其他任何类使用...
  • VB是个啥?

    千次阅读 2021-08-21 16:29:24
    第一章 VB的诞生 ... 编程是需要天赋的,你必须在大脑对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。但在第四代计算机
  • VB入门教程详细教程~

    2022-07-21 23:05:50
    VB入门教程
  • VB程序设计试卷.doc

    2022-06-20 15:37:28
    VB程序设计》补修课试卷 一、单选题(每题2分,空20分) 1. VB6.0是一种面向 ( ) 的编程环境。 (A) 机器 (B) 对象 (C) 过程 (D) 应用 2. 要使FormI窗体的标题栏显示... 以下关系表达式 ,其值为False的是( ) 。 (A
  • VB毕业设计 - VB设备管理信息系统(源代码+系统+答辩PPT).zip
  • VB毕业设计—VB设备管理信息系统(源代码+系统+答辩PPT).zip
  • vb蓝牙通讯技术

    2013-10-12 14:10:34
    如何使用VB进行蓝牙通讯的一个文档,有兴趣的可下来看看
  • VB模拟键盘事件的N种方法 多给资源分吧,兄弟
  • 在Windows环境下的所谓shell程序就是dos命令行程序,比如VC的CL.exe命令行编译器,JDK的javac编译器,启动java程序用的java.exe都是标准的shell程序
  • 1、VB期末考试试题及答案一、 填空题1、VB程序设计的主要特点是 可视化设计 和 事件编程 。2、在VB中,最主要的两种对象是窗体(form)和控件。3、工程是构成应用程序文件的集合。4、方法是VB提供的一种特殊子程序,...
  • VB中Sub过程与Function过程的区别

    千次阅读 2020-01-14 13:39:58
    通用过程与事件过程不同,它不依附于某一对象,也不是有对象的某一事件驱动或由系统自动调用,而是通过被调用语句(如Call语句)调用才起作用。通用过程可以被多次调用,调用该过程的过程称为调用过程。 Sub过程...
  • 江苏计算机二级部分汇总,内容包括VB基础知识及部分选择题
  • 如何实现点击VB中DataGrid行,触发事件弹出窗口,并传递所点击行参数: 通过双击事件来实现的: Private Sub DataGrid1_DblClick()  Dim frm1 As New frmNew ''定义一个窗体对象frm1,frmNew是程序的一...
  • ListView控件比前面几种控件要复杂一些,通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。ListView控件是由ColumnHeader和ListItem对象所组成的,其中ColumnHeader对象的个数决定了控件的...
  • 2016年计算机二级《VB》考试题及答案(1)下列符号常量的声明不合法的是A.ConstaAsSingle=3.5B.ConstaAsDouble=5+8C.ConstaAsInteger="25"D.Consta=”OK”【答案】C【解析】定义符号常量的一般格式:Const常量名[As...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,720
精华内容 6,688
关键字:

以下不是vb中的事件是