VB.NET里面的Event机制(三)

前端之家收集整理的这篇文章主要介绍了VB.NET里面的Event机制(三)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

现在我们看看这样一个问题。我们想要做这样一个控件,他继承自@H_404_2@Window.Forms.TextBox@H_404_2@下面,也就是说它支持@H_404_2@TextBox@H_404_2@的所有功能,但是我们需要一个新的功能,就是当用户按下回车之后,我们判断一下这个@H_404_2@TextBox@H_404_2@里面的文字,如果是空字符串的话,就显示一个@H_404_2@MessageBox@H_404_2@,默认的内容是“@H_404_2@Empty connect is not validated.@H_404_2@”。同时我们希望用户可以选择是否显示这个@H_404_2@MessageBox@H_404_2@。我们用此前的办法来做。@H_404_2@@H_404_2@

我们的类很快就可以完成。@H_404_2@@H_404_2@

Public@H_404_2@ Class@H_404_2@ MyTextBox@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Inherits@H_404_2@ TextBox@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Event@H_404_2@ EnterKeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByRef@H_404_2@ Cancel@H_404_2@ As@H_404_2@ Boolean@H_404_2@,ByRef@H_404_2@ Message@H_404_2@ As@H_404_2@ String@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ Sub@H_404_2@ MyTextBox_KeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByVal@H_404_2@ e@H_404_2@ As@H_404_2@ System@H_404_2@.Windows@H_404_2@.Forms@H_404_2@.KeyPressEventArgs@H_404_2@) Handles@H_404_2@ MyBase@H_404_2@.KeyPress@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Do something then user press ENTER KEY@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Asc@H_404_2@(e@H_404_2@.KeyChar@H_404_2@) = 13@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Dim@H_404_2@ Cancel@H_404_2@ As@H_404_2@ Boolean@H_404_2@ = False@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Dim@H_404_2@ Message@H_404_2@ As@H_404_2@ String@H_404_2@ = "Empty connect is not validated."@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Send the event with parameters@H_404_2@@H_404_2@@H_404_2@

@H_404_2@RaiseEvent@H_404_2@ EnterKeyPress@H_404_2@(Me@H_404_2@,Cancel@H_404_2@,Message@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@'Show message Box depend on the return parameters@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Cancel@H_404_2@ = False@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@MsgBox@H_404_2@(Message@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

End@H_404_2@ Class@H_404_2@@H_404_2@@H_404_2@@H_404_2@

而且我们很容易就可以使用这个控件了。@H_404_2@@H_404_2@

Public@H_404_2@ Class@H_404_2@ Form1@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Inherits@H_404_2@ System@H_404_2@.Windows@H_404_2@.Forms@H_404_2@.Form@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

#Region@H_404_2@ " Windows Form Designer generated code "@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Sub@H_404_2@ New@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@MyBase@H_404_2@.New()@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@ @H_404_2@'This call is required by the Windows Form Designer.@H_404_2@@H_404_2@@H_404_2@

@H_404_2@InitializeComponent@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'Add any initialization after the InitializeComponent() call@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'Form overrides dispose to clean up the component list.@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Protected@H_404_2@ Overloads@H_404_2@ Overrides@H_404_2@ Sub@H_404_2@ Dispose@H_404_2@(ByVal@H_404_2@ disposing@H_404_2@ As@H_404_2@ Boolean@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ disposing@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Not@H_404_2@ (components@H_404_2@ Is@H_404_2@ Nothing@H_404_2@) Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@components@H_404_2@.Dispose@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@MyBase@H_404_2@.Dispose@H_404_2@(disposing@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'required by the Windows Form Designer@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ components@H_404_2@ As@H_404_2@ System@H_404_2@.ComponentModel@H_404_2@.IContainer@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'NOTE: The following procedure is required by the Windows Form Designer@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'It can be modified using the Windows Form Designer. @H_404_2@@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Do not modify it using the code editor.@H_404_2@@H_404_2@@H_404_2@

@H_404_2@<System@H_404_2@.Diagnostics@H_404_2@.DebuggerStepThrough@H_404_2@()> Private@H_404_2@ Sub@H_404_2@ InitializeComponent@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@'@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Form1@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.AutoScaleBaseSize@H_404_2@ = New@H_404_2@ System@H_404_2@.Drawing@H_404_2@.Size@H_404_2@(5@H_404_2@,12@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.ClientSize@H_404_2@ = New@H_404_2@ System@H_404_2@.Drawing@H_404_2@.Size@H_404_2@(292@H_404_2@,273@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@@H_404_2@Me@H_404_2@.Name@H_404_2@ = "Form1"@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.Text@H_404_2@ = "Form1"@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

#End@H_404_2@ Region@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Friend@H_404_2@ WithEvents@H_404_2@ MyTextBox1@H_404_2@ As@H_404_2@ New@H_404_2@ MyTextBox@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

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

@H_404_2@Me@H_404_2@.Controls@H_404_2@.Add@H_404_2@(Me@H_404_2@.MyTextBox1@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.MyTextBox1@H_404_2@.Location@H_404_2@ = New@H_404_2@ Point@H_404_2@(100@H_404_2@,100@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ Sub@H_404_2@ MyTextBox1_EnterKeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByRef@H_404_2@ Message@H_404_2@ As@H_404_2@ String@H_404_2@) Handles@H_404_2@ MyTextBox1@H_404_2@.EnterKeyPress@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

End@H_404_2@ Class@H_404_2@@H_404_2@@H_404_2@@H_404_2@

现在看来一切正常,但是无聊的客户突然来了一个@H_404_2@Mail@H_404_2@@H_404_2@,他们希望我们能够在显示@H_404_2@MessageBox@H_404_2@@H_404_2@的时候,将@H_404_2@TextBox@H_404_2@@H_404_2@的背景色变成红色,并且允许有可能在其它的时候会变成绿色。也就是说变色也是要使用者可以自由设定的。这样我们就要在@H_404_2@Event@H_404_2@@H_404_2@参数列表里面加入一个新的背景色参数,并且修改所有使用了这个@H_404_2@Event@H_404_2@@H_404_2@的@H_404_2@Handle@H_404_2@@H_404_2@函数。@H_404_2@@H_404_2@

Public@H_404_2@ Class@H_404_2@ MyTextBox@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Inherits@H_404_2@ TextBox@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Event@H_404_2@ EnterKeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByRef@H_404_2@ Message@H_404_2@ As@H_404_2@ String@H_404_2@,ByVal@H_404_2@ BackColor@H_404_2@ As@H_404_2@ Color@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ Sub@H_404_2@ MyTextBox_KeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByVal@H_404_2@ e@H_404_2@ As@H_404_2@ System@H_404_2@.Windows@H_404_2@.Forms@H_404_2@.KeyPressEventArgs@H_404_2@) Handles@H_404_2@ MyBase@H_404_2@.KeyPress@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Do something then user press ENTER KEY@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Asc@H_404_2@(e@H_404_2@.KeyChar@H_404_2@) = 13@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Dim@H_404_2@ Cancel@H_404_2@ As@H_404_2@ Boolean@H_404_2@ = False@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Dim@H_404_2@ Message@H_404_2@ As@H_404_2@ String@H_404_2@ = "Empty connect is not validated."@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Dim@H_404_2@ Color@H_404_2@ As@H_404_2@ Color@H_404_2@ = Color@H_404_2@.Red@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Send the event with parameters@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@RaiseEvent@H_404_2@ EnterKeyPress@H_404_2@(Me@H_404_2@,Message@H_404_2@,Color@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@'Show message Box depend on the return parameters@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Cancel@H_404_2@ = False@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@MsgBox@H_404_2@(Message@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

End@H_404_2@ Class@H_404_2@@H_404_2@@H_404_2@@H_404_2@

然后修改使用的地方,也许实际上我们只是让它显示成默认的红色,我们也需要修改使用@H_404_2@Event@H_404_2@@H_404_2@的地方,因为@H_404_2@Event@H_404_2@@H_404_2@的定义已经不同了。@H_404_2@@H_404_2@

Public@H_404_2@ Class@H_404_2@ Form1@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Inherits@H_404_2@ System@H_404_2@.Windows@H_404_2@.Forms@H_404_2@.Form@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

#Region@H_404_2@ " Windows Form Designer generated code "@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Sub@H_404_2@ New@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@MyBase@H_404_2@.New()@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'This call is required by the Windows Form Designer.@H_404_2@@H_404_2@@H_404_2@

@H_404_2@InitializeComponent@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'Add any initialization after the InitializeComponent() call@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'Form overrides dispose to clean up the component list.@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Protected@H_404_2@ Overloads@H_404_2@ Overrides@H_404_2@ Sub@H_404_2@ Dispose@H_404_2@(ByVal@H_404_2@ disposing@H_404_2@ As@H_404_2@ Boolean@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ disposing@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Not@H_404_2@ (components@H_404_2@ Is@H_404_2@ Nothing@H_404_2@) Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@components@H_404_2@.Dispose@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@MyBase@H_404_2@.Dispose@H_404_2@(disposing@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'required by the Windows Form Designer@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ components@H_404_2@ As@H_404_2@ System@H_404_2@.ComponentModel@H_404_2@.IContainer@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@'NOTE: The following procedure is required by the Windows Form Designer@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'It can be modified using the Windows Form Designer. @H_404_2@@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Do not modify it using the code editor.@H_404_2@@H_404_2@@H_404_2@

@H_404_2@<System@H_404_2@.Diagnostics@H_404_2@.DebuggerStepThrough@H_404_2@()> Private@H_404_2@ Sub@H_404_2@ InitializeComponent@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@'@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Form1@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.AutoScaleBaseSize@H_404_2@ = New@H_404_2@ System@H_404_2@.Drawing@H_404_2@.Size@H_404_2@(5@H_404_2@,273@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.Name@H_404_2@ = "Form1"@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.Text@H_404_2@ = "Form1"@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

#End@H_404_2@ Region@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Friend@H_404_2@ WithEvents@H_404_2@ MyTextBox1@H_404_2@ As@H_404_2@ New@H_404_2@ MyTextBox@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ Sub@H_404_2@ Form1_Load@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ System@H_404_2@.Object,ByVal@H_404_2@ Color@H_404_2@ As@H_404_2@ Color@H_404_2@) Handles@H_404_2@ MyTextBox1@H_404_2@.EnterKeyPress@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

End@H_404_2@ Class@H_404_2@@H_404_2@@H_404_2@

现在我们只有这样一处使用这个@H_404_2@Event@H_404_2@的地方,但是假设我们有@H_404_2@100@H_404_2@个@H_404_2@Form@H_404_2@,每个@H_404_2@Form@H_404_2@都有@H_404_2@20@H_404_2@个这样的@H_404_2@TextBox@H_404_2@(记住,你做的是通用控件,他可能会被用在任何的地方,会被使用上千次)。那么我们就要这样修改@H_404_2@2000@H_404_2@次。其中可能只有@H_404_2@10@H_404_2@个时需要把背景色变成别的颜色,比如耦合色。但是我还是要修改@H_404_2@2000@H_404_2@函数的。@H_404_2@@H_404_2@

当我们终于修改完成之后,客户有发来一封稍有歉意的@H_404_2@Mail@H_404_2@,说他们还希望能够设定@H_404_2@MessageBox@H_404_2@的按钮状态和显示属性,大部分是@H_404_2@OKCancel@H_404_2@按钮和@H_404_2@Information@H_404_2@形式,个别的是@H_404_2@OK@H_404_2@按钮和@H_404_2@Error@H_404_2@形式。看来我们有需要修改我们的@H_404_2@TextBox@H_404_2@类和那@H_404_2@2000@H_404_2@函数了。@H_404_2@@H_404_2@

而后,用户又来了一个@H_404_2@Mail@H_404_2@……天哪,看来我们有必要把@H_404_2@Mail Service@H_404_2@关掉了。因为这样修改对于项目是毁灭性的。我们有必要重新审视一下我们的@H_404_2@TextBox@H_404_2@类的建立问题了。@H_404_2@@H_404_2@

我们现在关键的问题就是参数,我们增加一点@H_404_2@Event@H_404_2@功能,就需要修改@H_404_2@Event@H_404_2@的参数列表,然后修改所有使用这个@H_404_2@Event@H_404_2@的@H_404_2@Handle@H_404_2@函数。但是很多的时候,真正修改函数内部的地方可能很少,甚至没有。我们重复的劳动就是一个个修改@H_404_2@Handle@H_404_2@函数的参数列表。@H_404_2@@H_404_2@

那么我们看看@H_404_2@.NET@H_404_2@是怎么做的,我们看看@H_404_2@Form.Closing@H_404_2@事件@H_404_2@Handle@H_404_2@出来的函数。@H_404_2@@H_404_2@

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

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@@H_404_2@

我们把注意力集中到第二个参数,它不是我们前面熟悉的@H_404_2@EventArgs@H_404_2@@H_404_2@,而是@H_404_2@CancelEventArgs@H_404_2@@H_404_2@。而我们看看这个@H_404_2@CancelEventArgs@H_404_2@@H_404_2@里面都有什么。我们看到了@H_404_2@e.Cancel@H_404_2@@H_404_2@。@H_404_2@.NET@H_404_2@@H_404_2@把我们此前做的那个@H_404_2@Cancel@H_404_2@@H_404_2@参数通过第二个参数的成员属性传递进来了。这样我们就通过设定@H_404_2@e.Cancel@H_404_2@@H_404_2@来达到我们原先的处理。@H_404_2@@H_404_2@

这里可能有的人会产生疑问,@H_404_2@e@H_404_2@@H_404_2@参数被声明为@H_404_2@ByVal@H_404_2@@H_404_2@,它应该不能被返回到@H_404_2@RaiseEvent@H_404_2@@H_404_2@调用处的啊?但是事实是可以的。原因是@H_404_2@.NET@H_404_2@@H_404_2@在处理类的实例参数的时候,传进来的不是实例本身,而是实例的指针。而我们@H_404_2@ByVak@H_404_2@@H_404_2@的只不过是保存这个指针地址变量的一个副本。所以即使是@H_404_2@ByVal@H_404_2@@H_404_2@,如果这个参数是类的实例,也可以把成员传递回去。@H_404_2@@H_404_2@

这样做的好处就是如果还有新的参数加入,我们只需要修改这个@H_404_2@CancelEventArgs@H_404_2@@H_404_2@类和相应的@H_404_2@RasiseEvent@H_404_2@@H_404_2@调用的@H_404_2@HandleEvent@H_404_2@@H_404_2@如果不需要对应这个新的参数,就没有必要修改了。这个就是面向对象的好处,封装了操作,只通过接口来连接。也就是软件工程里面所说的松耦合。@H_404_2@@H_404_2@

现在我们已找这个办法修改自己的@H_404_2@TextBox@H_404_2@@H_404_2@类。首先我们要做好这个@H_404_2@EventArgs@H_404_2@@H_404_2@类,模仿@H_404_2@CancelEventArgs@H_404_2@@H_404_2@,我们做一个@H_404_2@EnterKeyPressEventArgs@H_404_2@@H_404_2@。@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Class@H_404_2@ EnterKeyPressEventArgs@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Inherits@H_404_2@ EventArgs@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ m_Cancel@H_404_2@ As@H_404_2@ Boolean@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ m_Message@H_404_2@ As@H_404_2@ String@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@Private@H_404_2@ m_BackColor@H_404_2@ As@H_404_2@ Color@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ Cancel@H_404_2@() As@H_404_2@ Boolean@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_Cancel@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ Boolean@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@m_Cancel@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ Message@H_404_2@() As@H_404_2@ String@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_Message@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ String@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@@H_404_2@m_Message@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ BackColor@H_404_2@() As@H_404_2@ Color@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_BackColor@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ Color@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@m_BackColor@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Sub@H_404_2@ New@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@m_Cancel@H_404_2@ = False@H_404_2@@H_404_2@@H_404_2@

@H_404_2@m_Message@H_404_2@ = "Empty connect is not validated."@H_404_2@@H_404_2@@H_404_2@

@H_404_2@m_BackColor@H_404_2@ = Color@H_404_2@.Red@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Class@H_404_2@@H_404_2@@H_404_2@@H_404_2@

这个类继承自@H_404_2@EventArgs@H_404_2@@H_404_2@,通过私有变量和公共属性来传递参数。为什么不用共有变量呢,有原因的,我心准备在专门写一篇文章说说这个问题。反正这样私有变量加公共属性的办法比公共变量要好。@H_404_2@@H_404_2@

然后我们修改@H_404_2@TextBox@H_404_2@@H_404_2@类,调用@H_404_2@RaiseEvent@H_404_2@@H_404_2@的地方就可以使用这个类了。@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Event@H_404_2@ EnterKeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByVal@H_404_2@ e@H_404_2@ As@H_404_2@ EnterKeyPressEventArgs@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ Sub@H_404_2@ MyTextBox_KeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByVal@H_404_2@ e@H_404_2@ As@H_404_2@ System@H_404_2@.Windows@H_404_2@.Forms@H_404_2@.KeyPressEventArgs@H_404_2@) Handles@H_404_2@ MyBase@H_404_2@.KeyPress@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Do something then user press ENTER KEY@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ Asc@H_404_2@(e@H_404_2@.KeyChar@H_404_2@) = 13@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Create the args instance@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Dim@H_404_2@ ekpea@H_404_2@ As@H_404_2@ New@H_404_2@ EnterKeyPressEventArgs@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Send the event with parameters@H_404_2@@H_404_2@@H_404_2@

@H_404_2@RaiseEvent@H_404_2@ EnterKeyPress@H_404_2@(Me@H_404_2@,ekpea@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@'Show message Box depend on the return parameters@H_404_2@@H_404_2@@H_404_2@

@H_404_2@If@H_404_2@ ekpea@H_404_2@.Cancel@H_404_2@ = False@H_404_2@ Then@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Me@H_404_2@.BackColor@H_404_2@ = ekpea@H_404_2@.BackColor@H_404_2@@H_404_2@@H_404_2@

@H_404_2@MsgBox@H_404_2@(ekpea@H_404_2@.Message@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ If@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@@H_404_2@

我们使用的时候,也可以相应的修改成。@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ Sub@H_404_2@ MyTextBox1_EnterKeyPress@H_404_2@(ByVal@H_404_2@ sender@H_404_2@ As@H_404_2@ Object@H_404_2@,ByVal@H_404_2@ e@H_404_2@ As@H_404_2@ MyTextBox@H_404_2@.EnterKeyPressEventArgs@H_404_2@) Handles@H_404_2@ MyTextBox1@H_404_2@.EnterKeyPress@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Some codes ...@H_404_2@@H_404_2@@H_404_2@

@H_404_2@e@H_404_2@.Cancel@H_404_2@ = False@H_404_2@@H_404_2@@H_404_2@

@H_404_2@e@H_404_2@.Message@H_404_2@ = "My message ... "@H_404_2@@H_404_2@@H_404_2@

@H_404_2@e@H_404_2@.BackColor@H_404_2@ = Color@H_404_2@.Green@H_404_2@@H_404_2@@H_404_2@

@H_404_2@'Some codes ...@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@@H_404_2@

这样即便客户又来信说,我们需要加入一个功能,设定这个@H_404_2@MessageBox@H_404_2@@H_404_2@的按钮类型,默认是@H_404_2@VBOKOnly@H_404_2@@H_404_2@和@H_404_2@Information@H_404_2@@H_404_2@。我们需要修改的地方首先是这个@H_404_2@EventArgs@H_404_2@@H_404_2@。@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Class@H_404_2@ EnterKeyPressEventArgs@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@Inherits@H_404_2@ EventArgs@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ m_Cancel@H_404_2@ As@H_404_2@ Boolean@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ m_Message@H_404_2@ As@H_404_2@ String@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ m_BackColor@H_404_2@ As@H_404_2@ Color@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Private@H_404_2@ m_ButtonStyle@H_404_2@ As@H_404_2@ MsgBoxStyle@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ Cancel@H_404_2@() As@H_404_2@ Boolean@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_Cancel@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ Boolean@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@m_Cancel@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ Message@H_404_2@() As@H_404_2@ String@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_Message@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ String@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@m_Message@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ BackColor@H_404_2@() As@H_404_2@ Color@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_BackColor@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ Color@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@m_BackColor@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Property@H_404_2@ Style@H_404_2@() As@H_404_2@ MsgBoxStyle@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Return@H_404_2@ m_ButtonStyle@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Get@H_404_2@@H_404_2@@H_404_2@

@H_404_2@Set@H_404_2@(ByVal@H_404_2@ Value@H_404_2@ As@H_404_2@ MsgBoxStyle@H_404_2@)@H_404_2@@H_404_2@

@H_404_2@m_ButtonStyle@H_404_2@ = Value@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Set@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Property@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@Public@H_404_2@ Sub@H_404_2@ New@H_404_2@()@H_404_2@@H_404_2@

@H_404_2@m_Cancel@H_404_2@ = False@H_404_2@@H_404_2@@H_404_2@

@H_404_2@m_Message@H_404_2@ = "Empty connect is not validated."@H_404_2@@H_404_2@@H_404_2@

@H_404_2@m_BackColor@H_404_2@ = Color@H_404_2@.Red@H_404_2@@H_404_2@@H_404_2@

@H_404_2@m_ButtonStyle@H_404_2@ = MsgBoxStyle@H_404_2@.OKOnly@H_404_2@ Or@H_404_2@ MsgBoxStyle@H_404_2@.Information@H_404_2@@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Sub@H_404_2@@H_404_2@@H_404_2@

@H_404_2@@H_404_2@

@H_404_2@End@H_404_2@ Class@H_404_2@@H_404_2@@H_404_2@@H_404_2@

然后修改@H_404_2@RaiseEvent@H_404_2@@H_404_2@的一句话。@H_404_2@@H_404_2@

MsgBox@H_404_2@(ekpea@H_404_2@.Message@H_404_2@,ekpea@H_404_2@.Style@H_404_2@)@H_404_2@@H_404_2@@H_404_2@

而使用的@H_404_2@Handle@H_404_2@@H_404_2@函数只要使用默认值,就不需要修改了。@H_404_2@

猜你在找的VB相关文章