VB程序中处理随机事件

VB.NET实现的随机抽签程序项目 VB.NET,全称为Visual Basic .NET,是微软公司开发的一种面向对象的编程语言,它是Visual Basic的继承者,最初在.NET框架中引入。该语言自2002年发布以来,就成为开发Windows应用程序的重要工具之一。公平性是随机抽签程序设计的核心,它保证了每个元素被选中的概率相同,从而避免了人为的干预和偏见。在公平的抽签程序中,任何外部因素都不应该影响结果的随机性。在许多情况下,公平性的重要性不言而喻。例如,在法庭抽签确定陪审员时,保证公平性是确保审判公正的前提。 阅读详情
在程序设计过程中,如何轻松地处理众多的随机事件,往往是制作大型系统首先要考虑的问题之一。用C语言开发Windows程序时,可以方便地使用消息机制(Message),但是,设计VB程序时,就没有这样的方便条件了。例如,多个窗口同时打开同一个表(Table),当在一个窗口中对数据进行了修改,而其他的窗口也能够随之进行数据更新,这时就需要有一条说明数据改变了的消息在所有的窗口间进行广播。如果使用的语言是C,只需要定义一条用户消息(UserMessage),就可以实现这一点。可是如果是用VB编程,做起来就不是那么简单了。VB5.0企业版中增添了许多强有力的特性,有几点特性,正好可以帮助我们解决难题。先介绍一下这几个特性:

  1.用户自定义事件:在类模块中,可以使用Event关键字来定义用户自定义事件,使用RaiseEvent语句来产生该事件,这一机制给处理随机事件带来极大的方便。当收到需要广播的消息时,产生一个预定义的事件,而需要处理消息的客体对象,只需截获该事件,就完成了消息的传递。

  2.ActiveX EXE部件:利用VB,可以方便地将共享代码封装在ActiveX部件之中。将消息广播引擎实现于一个ActiveX部件之中,不仅方便了在程序中使用,而且更为重要的一点是,可以实现跨进程间的消息传递。因为ActiveX部件有内部(DLL)外部(EXE)两种,对于外部部件,可以对模块内的全局数据实现共享(关于ActiveX两种代码部件的

区别,请阅读VB的联机帮助文件)。

  3.远程自动化连接:ActiveX部件,是一种标准的客户机/服务器结构,利用Windows平台的COM模型,VB已能方便地将这种结构扩展到整个网络的范围。所以,我们的消息广播设计,在实现了进程间的消息传递之后,进而实现网络上的消息传递,也成为可能。

  通过上面的几点介绍,这一方式的设计思想也就比较清楚了,在具体设计时,通过四个模块之间的相互协作,完成了消息的发送、广播及接收,并将这四个模块封装在一个ActiveXEXE部件之中。下面就是这三个类模块的简单介绍及源代码:

  类模块之一:Msg.cls----在该模块中,定义了消息数据结构VbMsg类,它是消息传递中的载体。这里只是一个简单的例子,如果想实现更多的功能,如建立两点间的数据通道,而不是单纯的广播消息,则可能需要对该结构进行一些扩充。



Option Explicit

/ 说 明:

/ 消 息 类: 定 义 全 局 的 消 息 结 构

Public iType As Long      /消 息 类 型 编 号

Public iName As String     /消 息 名

Public iSource As String    / 消 息 源 说 明

Public iDescription As String /消 息 说 明

Dim iT As Date     / 消 息 发 生 时 间

/返 回 日 期 型 时 间

Public Property Get iTime() As Date

  iTime = iT

End Property

/返 回 字 符 型 时 间

Public Property Get iTimeStr() As String

  iTimeStr = Format(iT, "yyyy.mm.dd hh:mm:ss")

End Property

/ 在 对 象 被 建 立 时, 设 置 消 息 发 生 时 间

Private Sub Class_Initialize()

  iT = Now()

End Sub

  类模块之二:MsgCli.cls ---- 本模块是对客户接收端MsgClient类的定义,这相当于一

个消息接收器。在这个类中定义的一个RecMsg事件,当接收器收到消息时(过程SetMsg被

调用),就产生这一事件.接收器的建立者就截获这一事件,并处理消息。为了避免接收不

必要的消息,声明了minMsg、maxMsg两个变量,以便对VbMsg中的iType属性进行过

滤。

Option Explicit

' 说 明:

' 客 户 消 息 接 收 类

' 定 义 接 收 消 息 事 件, 该 对 象 的 宿 主 类 应 截 获 该 事 件,

并 处 理接 收 到 的 消 息。

Public Event RecMsg(ByVal msg As VbMsg)

' 通 过 设 置 消 息 的 接 收 范 围, 可 以 过 滤 掉 不 需 要 的 消息

Public minMsg As Long

Public maxMsg As Long

' 该 对 象 的 标 志 编 号, 使 用 时 不 应 修 改 该 值

Public ID As Long

' 事 件 产 生 过 程, 只 应 由 消 息 服 务 器(MsgServer) 调 用

Public Sub SetMsg(msg As VbMsg)

  If msg.iType >= minMsg And msg.iType <= maxMsg Then RaiseEvent RecMsg(msg)

End If End Sub ' '

  根 据ID, 返 回 对 象 的 关 键 字, 只 应 由 消 息 服 务 器(MsgServer)调 用

Public Property Get Key() As String Key="ID:" & ID End Property

  类模块之三:Global.bas ---- 本模块声明了两个全局变量,一个是接收器(MsgClient)列表(Clients),一个是接收器计数器,以为每个接收器分配一个唯一的ID标志。把变量放在单独的模块中,是为了实现数据在进程间的共享,是跨进程间消息传递的关键所在。(应保证在编译时工程是单线程的,否则数据共享则不能实现。)。

Option Explicit

/ 说 明:

/ 消 息 服 务 器 全 局 变 量

/消 息 接 收 客 户 列 表

Public Clients As New Collection

/ 消 息 接 收 客 户ID 计 数 器

Public CliCount As Long

  类模块之四:MsgSrv.cls----本模块中定义了消息服务器类MsgServer,该类是消息广播引擎的主体,它主要管理维护消息接收器列表(Clients),将发送来的消息(调用SendMsg过程)依次发送给列表中的所有接收器。注意,这个类被声明为公共全局类,这主要是为了方便使用(不必在每个程序中再建立该类,过程名全局有效)。

Option Explicit

/说 明:

/消 息 服 务 器 类

/发 送 消 息

Public Sub SendMsg(msg As VbMsg)

  Dim c As MsgClient

  For Each c In Clients

    c.SetMsg msg

    DoEvents

  Next c

End Sub

/增 删 消 息 接 收 客 户

Public Sub AddMsgClient(c As MsgClient)

  CliCount = CliCount + 1

  c.Id = CliCount

  Clients.Add c, c.Key

End Sub

Public Sub DelMsgClient(c As MsgClient)

  Clients.Remove c.Key

  If Clients.Count = 0 Then CliCount = 0

End Sub

  到这里,一个小巧灵活的消息广播引擎就完成了,它的使用范围很广,用起来也很方便,只需在工程中引入编译过的ActiveX部件,就可以直接调用SendMsg发送消息,可能在安装消息接收器(MsgClient)时会稍许有点麻烦,下面举一个简单的应用例子大致说明一下:

  在设计Windows程序时,往往会感觉到程序的实际运行过程与你想象的相差甚远,调试时就非常希望看到程序运行时后台的一些情况。利用VB的单步执行或Debug命令,都会受到一些限制。利用消息广播引擎,制作一个通用的实时消息事件查看程序,就可以很好地解决这一问题。查看程序的主要工作就是捕捉一组事先定义好的消息事件,并将消息的内容显示在列表框内,可以只用一个窗体完成,大体样子如下:

Const MsgInfoID=101

Private WithEvents mClient As MsgClient

Private Sub Form_Load()

  Set mClient = New MsgClient

MClient.minMsg= MsgInfoID

MClient.maxMsg= MsgInfoID

AddMsgClient mClient

End Sub

Private Sub Form_Unload(Cancel As Integer)

  DelMsgClient mClient

End Sub

Private Sub mClient _RecMsg(ByVal msg As VbMsgSrv.VbMsg)

  List1.AddItem msg.iTimeStr & Chr(9) & msg.iName & Chr(9) & msg.iDescription

End Sub

  在被调试的程序中,为了调用方便,可以编写一个全局过程,象下面这个样子:

Const MsgInfoID=101

Public Sub MsgInfo(iName As String,iDes As String)

Dim msg As New MsgClient

With msg

.iName = iName

. iDescription = iDes

End With

SendMsg msg

End Sub

  在程序的重点需要了解的环节插入MsgInfo过程,运行时信息就会在事件查看程序的窗 口中被显示出来。这种方法尤其适合调试多程序协作的软件系统。当软件系统正式交给用 户时,插入的MsgInfo过程也不一定要全部删掉,只要将实时查看变为写入日志文件,这 些运行时的信息也是日后软件维护的第一手资料。
基于VB的随机点名系统设计与实现 你看,一个看似简单的“随机点名程序”,竟然牵扯出这么多技术细节:随机数生成:从种子初始化到整数转换,每一步都不能马虎;数据结构选择:数组 vs Collection,性能与灵活性的权衡;输入清洗:防御性编程,防止用户“搞事情”;GUI设计:不仅要功能完整,还要体验流畅;调试发布:从开发到落地,全流程打通;持续迭代:功能可以不断进化,满足更多需求。这正是编程的魅力所在:把复杂藏在简单之下,用技术解决真实世界的问题。 阅读详情

相关推荐

VB实现随机矩阵生成与转置操作

随机矩阵是应用数学和计算机科学中广泛应用的一种矩阵形式,尤其在模拟、统计测试和数据分析中占有重要位置。它由随机选取的元素组成,可以用于测试算法的稳健性和模拟复杂系统的运行状态。通过对以上两个案例的分析,我们不仅学会了如何使用VB创建和操作随机矩阵和执行矩阵转置,而且还能够体会到它们在统计学和数据分析中的实际应用价值。这两个案例说明了VB在处理矩阵相关任务中的灵活性和强大能力。在实际应用中,正确地理解和实现这些操作可以大大提高数据处理的效率和准确性。

weixin_32445049的博客 1265

VB中RaiseEvent语句的功能及用法

Creat a new class named Class1, it's codes like this: Public Event MyEvent() Public Sub RaiseTheEvent() 'some other codes here RaiseEvent MyEvent End Sub Create a new form, draw a comm...

weixin_30639719的博客 1025

VB6用户自定义事件EVENT实例.zip

VB用户自定义事件绕来绕去的,翻了半天书也不好弄清楚,最后还是仔细翻看MSDN的事例弄有了。我把它贴成了VB可运行工程,试运行一下就很有体验感了,学起来省时省力。取之于MSDN用之于需要的学习,不需要消耗积分。

VB6.0的事件、回调函数等

何时使用事件或回调通知 主题“使用回调的异步通知”和“使用事件的异步通知”演示表明回调所要实现的工作比事件多。但不应只是根椐工作量来决定使用哪一种方式。回调和事件代表不同的通讯方式,应选择最适合需要的。 可将事件和回调之间的差别特征化:事件象匿名广播,而回调象一次握手。 由此可知,引发事件的部件对其客户端一无所知,而进行回调的部件却知之甚详。 对于开发人员意味着: 客户端引用一个

假装狠牛逼 9816

Hyper-V虚拟机 安装 银河麒麟V10桌面版

如何在windows 11 Hyper-V 虚拟机中 安装 银河麒麟V10桌面版。

m0_46756112的博客 3425

FDTD Script命令学习-farfield3d/farfieldux/farfielduy

介绍了farfield3d/farfieldux/farfielduy命令功能,及不同应用语法和参数介绍,以及对官网示例进行介绍。

jxxl_1314的博客 3098

vb和vb.net事件机制

事件是面对对象中对象间通信的方法。事件发生者(又叫事件源)发生一个事件时,通过发送一条消息,给事件接受者(事件处理者),事件接受者可以做出响应的处理。比如在某登录界面中,单击一个按钮,系统会验证用户的用户名和密码是否正确。用户单击按钮后,按钮(事件源)发出了单击事件,产生了自己被单击的消息给窗体,窗体(事件接受者)在自身代码窗口中进行响应的处理。我们分别看下在vb和vb.net中是怎么实现事件机制

chinaherolts2008的博客 943

TIBCO Spotfire 入门指南

数据分析工具 - TIBCO Spotfire 入门指南(一) 文章目录数据分析工具 - TIBCO Spotfire 入门指南(一)前言一、Sportfire 是什么?二、使用Sportfire 创建一个简单的数据分析模型1.设置分析(加载数据)2.编辑数据源3.创建图表3.1 创建交叉表3.2 创建饼图3.3 创建树形图3.4 创建散点图3.5 创建自定义筛选器总结 前言 通过对本指南的学习,你可以了解到如何开始用TIBCO Sportfire分析数据,并能详细了解您可以做什么以及怎么做 一、Spo

kaiakai111的博客 1万+

[导入]VB程序中处理随机事件

文章来源:http://blog.youkuaiyun.com/nm/archive/2000/08/08/4400.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2000/08/08/816565.html

weixin_30706691的博客 139

实战分享:一文读懂RS-232总线

RS-232标准接口(又称EIARS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(Electronic IndustryAssociation,EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。

阿荣嵌入式 8520

论文阅读 Quantum Convolutional neural network

在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。

m0_54373077的博客 2004

VB程序设计实验报告

VB程序设计实验报告 一:试验目的: 1 利用vb程序设计语言制作随机图形 2 利用vb程序设计语言制作动画 二:实验内容: 1先进行界面分布和相应的属性设置 2编写代码如下: 1,Private Sub Command1_Click() Timer1.Enabled = True Timer1.Interval = 100 End Sub Private Sub Comma

sunqingxue的专栏 2570

AndroidKiller之APK 编译失败,无法继续下一步签名【BUG解决】【App反向解析】

文章目录项目场景:问题描述原因分析:解决方案:BUG解决 项目场景: AndroidKiller: 在反向解析APP包时报错:APK 编译失败,无法继续下一步签名。 网上很多方法都是无效的哈,我追究原因发现,这个bug的出现大部分情况都是因为Apktool的问题。 此方法:百分之百解决此bug! 错误如下: 问题描述 APK 编译失败,无法继续下一步签名! 原因分析: Apktool版本不适配的问题,现在的技术更新换代太快,我们安装AndroidKiller的时候,有时候不是官方渠道的话,他的版本是非常

一键难忘的博客 2万+

vb.net 2010 生成随机颜色

在vb.net 2010中生成一个随机颜色是非常方便的,只需要三个“0~255”的随机数即可: Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BackCol

myriceme的专栏 2916

HDOCK 蛋白蛋白对接软件使用;LZerD、pyDock、ClusPro网页在线对接

参考:hdock支持蛋白与蛋白,也支持蛋白与核酸对接计算。

weixin_42357472的博客 1万+

LDRA Testbed软件静态分析_操作指南

从本文起,将开始LDRA Testbed(TBrun)教程的系列文章,包括软件静态分析、单元测试、集成测试,以及基于Testbed的自动化工具开发、持续集成、常见问题解答等。LDRA公司是专业的软件测试工具与测试技术、咨询服务提供者,其总部位于英国利物浦。其旗舰产品Testbed/TBrun功能全面、易于使用,不仅适合于主机平台软件测试,同时适合于嵌入式软件测试。不仅能进行软件静态测试,还能进行软件单元测试、软件集成测试,在白盒测试领域运用比较广泛。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1万+

15电气郄慧敏vb作业5比较两个数的大小

实验名称;比较两个数的大小 1 打开电脑桌面上的vb软件。 2单击工具中的command button按钮,在form1中的合适位置,单击鼠标左键拖曳,直到出现小窗口为止。修改caption为"排序了". 3单击工具中的text box,按照同样的方法在form1中建立一个窗口。 4双击command button,在弹出的对话框中输入编程: clls me.font.size=50

qhm15613688303的博客 574

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

vb.net产生随机数Random代码实例

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 随机数 Dim a As Random = New Random(55) Label1.Text = a.Next(10, 15) End Sub vb.net产生随机数Random代码实例

B类代码区 1842

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

15电气臧洪颖比较两个数的大小

实验名称;比较两个数的大小 1打开电脑桌面上的vb。 2鼠标单击左侧工具栏中的command button,在form1中,按住鼠标左键拖曳,直到出现一个小窗口。 3双击此窗口,在弹出的窗口中输入以下内容; cls me.font.size=50 dim a as integer dim b as integer dim swap as intege

h841036500的博客 327

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

15电气刘慧岩作业

 1.打开VB 2.新建一个按钮。 3.双击按钮,在新的窗口中输入以下代码 Private Sub Command1_Click() Cls Me.Font.Size = 24 Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer Dim f As

LHYhuiyan的博客 635

用vb写计算机程序代码,用VB编写的抽奖程序源代码随机抽取不重复

年度抽奖的小程序,可以自定义年度抽奖小程序,您可以自定义背景,抽奖形式,设置奖品等.PPT彩票小程序PPT开发工具彩票代码,VBA代码,每个需要它的人都可以下载.彩票程序(用VB6.0源代码编写)彩票程序(用VB6.0源代码编写)抽取随机生成的并计算抽奖次数.vb彩票工具用vb制成的vb绘制工具用vb制成的vb绘制工具用vb制成的vb绘制工具用vb制成的vb绘制工具用vb制成的vb绘制工具用VB编...

weixin_36115475的博客 2837

VB对象的事件和方法

对象的事件: 事件是指对象对于外部动作的响应,当对象发生了某个事件,就会执行相应的代码,这段代码被称为“事件过程”。 事件是Visual Basic预先编辑好的并且能够被对象识别的的动作,VB采用的是事件驱动机制,当用户触发了某个事件时,程序就会执行该事件过程下的代码。 例如,用户点击一次按钮,就会触发一次该按钮的单击事件,即Command1_Click事件。 一个事件,就好比一个动作,用户单击按钮是一个事件,双击按钮也是一个事件,按下一个键盘的按键是一个事件,关闭某个窗口也是一个事件。实际上,VB编程的思

weixin_39433293的博客 5160

随机抽取学生姓名html,VB中随机抽取学生姓名的程序

在本程序中,同学的学号、姓名信息均来自 初一五班选修课志愿表Dim MyValue AsIntegerDim last AsIntegerDim counter AsLong'注:使用long定义了计数器,则启动一次不进行重置,最多可生成(2^31-1+1)个随机数,在原基础上+1是因为初值为0Private Submake_Click()If counter =0 Then'注:计数器为初值...

weixin_39589241的博客 1933
下一篇: Sybase存储过程的建立和使用
普通网友
博客等级 码龄26年 3粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值