vb.net发送方和e事件参数

在VB6中,事件子例程(如Button1_Click)的复杂性要小得多,因为系统严格按名称调用子例程。如果存在按钮单击事件,系统将调用它。这是直截了当的。...

在VB6中,事件子例程(如Button1_Click)的复杂性要小得多,因为系统严格按名称调用子例程。如果存在按钮单击事件,系统将调用它。这是直截了当的。

Computer programmers looking at code Computer programmers looking at code

但是在VB.NET中,有两个主要的升级使得VB.NET很快成为目标(即面向对象编程的“OOP”)。

  1. “Handles”子句控制系统是否调用子例程,而不是名称。
  2. sender和e参数被传递给子例程。

参数的使用

让我们看一个简单的例子,看看VB.NET中参数的不同之处。

Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles Button1.Click ' Your code goes here End Sub

事件子例程始终接收“sender”对象和系统EventArgs参数“e”。因为EventArgs参数是一个对象,所以它支持任何必要的属性和方法。例如,用于接收四个参数的旧VB6 MouseMove事件子例程:

  • 按钮为整数
  • 移位为整数
  • X为单个
  • 你是单身吗

当更高级的鼠标出现更多的按钮时,VB6在支持它们方面遇到了一个真正的问题。VB.NET只传递一个MouseEventArgs参数,但它支持更多的属性和方法。它们中的每一个都是支持更多功能的对象。例如,e.Button属性包含以下所有属性:

  • 左边
  • 中间的
  • 正当
  • 没有一个
  • 按钮1
  • 按钮2

如果有人发明了一种带有“虚拟”按钮的“trancendental”鼠标,VB.NET只需更新.NET Framework即可支持它,并且之前的代码不会因此中断。

有许多.NET技术完全依赖于这些参数。例如,由于您的电脑通常只有一个屏幕来显示图形,因此您的代码必须将它创建的图形合并到Windows使用的相同图像中。因此,必须共享一个“图形”对象。代码能够使用该“graphics”对象的主要方式是使用e参数,该参数通过PaintEventArgs对象传递给OnPaint事件。

Protected Overrides Sub OnPaint( ByVal e As System.Windows.Forms.PaintEventArgs) Dim g As Graphics = e.Graphics

其他例子

您还可以使用这些参数做什么?举例来说,假设您希望在单击其他文本框时,查找字符串(可能是您在文本框中输入的内容)是否存在于其他文本框集合的任何一个中。您可以为每个文本框编写几十个几乎相同的子例程:

If TextBox42.Text.IndexOf( SearchString.Text) = -1 Then NotFound.Text = "Not Found"

但只编写一个代码并让它处理所有代码要容易得多。sender参数将显示单击的文本框。

Private Sub FindIt( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles TextBox1.Enter, TextBox2.Enter, . . . and on and on . . . TextBox42.Enter Dim myTextbox As TextBox myTextbox = sender Dim IndexChar As Integer = myTextbox.Text.IndexOf( SearchString.Text) If IndexChar = -1 Then _ NotFound.Text = "Not Found" _ Else _ NotFound.Text = "Found It!" End Sub

最近,一位程序员问我一个更好的方法“删除在六个指定列表中任何一个列表中单击的行”。他让它在几十行代码中工作,这让我很困惑。但是使用sender,它实际上非常简单:

Private Sub ListBox_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles ListBox1.Click, ListBox2.Click Dim myListBox As New ListBox myListBox = sender myListBox.Items.RemoveAt(myListBox.SelectedIndex) End Sub

确定这一点的另一个例子是皮埃尔在比利时提出的一个问题。Pierre使用对象的Is运算符测试Button1和sender的相等性:

If sender Is Button1 Then ...

这在语法上是正确的,因为sender和Button1都是可以引用的对象。既然发送者真的和Button1一样,为什么它不工作呢?

答案取决于在语句中稍早找到的关键字。首先,让我们检查一下Is操作员的Microsoft文档。

VisualBasic使用Is运算符比较两个对象引用变量。此运算符确定两个引用变量是否引用同一对象实例。

请注意,发送方是通过val传递的。这意味着传递的是Button1的副本,而不是实际对象本身。因此,当Pierre测试sender和Button1是否为同一实例时,结果为False。

要测试是否单击了Button1或Button2,您必须将sender转换为实际的Button对象,然后测试该对象的属性。通常使用文本,但您可以测试标记中的值,甚至位置属性。

此代码适用于:

Dim myButton As Button myButton = sender If myButton.Text = "Button1" Then

  • 发表于 2021-10-15 16:51
  • 阅读 ( 161 )
  • 分类:数学

你可能感兴趣的文章

功能(function)和vb程序(procedure in vb)的区别

...。此外,VB还提供了各种功能,如标准库、委托、属性、事件、索引器和许多其他功能。函数和过程是与visualbasic编程相关的两个概念。所有可执行语句都应该在一个过程中。总的来说,Function、sub和operator是一些类型的过程。 覆...

  • 发布于 2021-07-01 18:59
  • 阅读 ( 280 )

.net(.net)和asp.net(asp.net)的区别

...程语言。创建页面实例时,首先会发生一个名为PreInit的事件,它会调用方法page\u PreInit,用于设置页面的主题。接下来发生Init事件,调用方法Page\u Init,初始化页面的对象。然后,发生Load事件,并执行Page\u Load事件处理程序。Ini...

  • 发布于 2021-07-13 08:28
  • 阅读 ( 108 )

vb语言(vb)和运动模拟(vb.net)的区别

...但是,它与BASIC有很大的不同,因为VB是可视化的,也是事件驱动的。BASIC代表初学者的通用符号指令代码。它是由Microsoft创建的。它提供了一个图形用户界面GUI,在这个GUI的帮助下,开发人员可以轻松地将各种对象拖放到程序中...

  • 发布于 2021-07-13 21:15
  • 阅读 ( 253 )

vb.net中的强制转换和数据类型转换

...型的过程。例如,将整数类型强制转换为字符串类型。VB.NET中的某些操作需要特定的数据类型才能工作。强制转换将创建所需的类型。本系列由两部分组成的第一篇文章,VB.NET中的强制转换和数据类型转换,介绍了强制转换。本...

  • 发布于 2021-09-07 01:21
  • 阅读 ( 225 )

visual basic术语表

...GUI对象的工具,而不是对象本身。 Cookie最初从web服务器发送到浏览器并存储在计算机上的一小包信息。当您的计算机再次咨询原始web服务器时,cookie将被发送回服务器,允许它使用以前交互中的信息响应您。Cookie通常用于使用...

  • 发布于 2021-09-10 22:25
  • 阅读 ( 238 )

有关在visual basic中序列化的所有信息

...您还可以将这些对象以文件的形式存储在磁盘上,通过web发送,将它们传递到其他程序,保留备份副本以确保安全。这种可能性实际上是无穷无尽的。 这就是为什么序列化在.NET和Visual Basic中是如此关键的过程。下面是通过实...

  • 发布于 2021-09-11 23:49
  • 阅读 ( 193 )

什么是vb.net资源及其使用方法(vb.net resources and how)

...优势:更好的全球化。资源通常包含在主程序集中,但.NET还允许您将资源打包到附属程序集中。通过这种方式,您可以实现更好的全球化,因为您只包含所需的附属程序集。微软给了每种语言一个代码。例如,英语的美国方言...

  • 发布于 2021-09-11 23:50
  • 阅读 ( 181 )

vb.net控件继承编程简介

...键的事情需要注意: 第一个是代码使用覆盖替换OnPaint事件将发生的标准.NET行为。只要Windows注意到必须重建部分显示,就会触发OnPaint事件。例如,当另一个窗口显示部分显示时。Windows会自动更新显示,但会在代码中调用OnPaint...

  • 发布于 2021-09-11 23:52
  • 阅读 ( 182 )

如何在visual basic 6中创建和使用资源(create and use resources in visual basic 6)

...tton组件,分别标记为Earth、Water、Air和Fire,以及四个单击事件——每个选项一个。然后,我添加了一个CommandButton,并将Style属性更改为“1–Graphical”。这是向CommandButton添加自定义图标所必需的。每个OptionButton的代码(以及表单...

  • 发布于 2021-09-11 23:54
  • 阅读 ( 226 )

vb.net解决方案和项目文件“sln”和“vbproj”

...。例如,如果您的计算机在64位模式下运行,则无法在VB.NET Express中以32位CPU为目标,例如,与32位Access Jet数据库引擎兼容。(Visual Studio在其他版本中提供了一种方法),但您可以添加以下内容: 添加到.vbproj文件中的元素以完...

  • 发布于 2021-09-11 23:55
  • 阅读 ( 221 )
moam6571
moam6571

0 篇文章

相关推荐