(vb.net)动态添加的控件如何多次响应事件?

来源:百度知道 编辑:UC知道 时间:2024/09/21 13:50:30
例如,在窗体上动态添加了一些textbox,需要验证textbox中输入的是否是数字。我知道在添加时可用类似于AddHandler tt(pk).TextChanged, AddressOf TextChangedHandler的语句来实现,但问题是只能验证一次,假如textbox失去焦点后又获得焦点且被编辑,此时就无法进行验证,也就是无法再次触发自定义的TextChangedHandler事件。各位大侠有何高见,望赐教一二。
没想到能得到张琎专家的回答,十分感谢,按你的方法虽然可以多次响应事件,但有出现一个问题,就是只有最后动态加载的textbox才可以响应事件,前面已加载过的textbox不会响应事件,不知如何解决。我的代码如下:
Dim oControl As Object
Dim cc As Int16 = 0
Dim A() As TextBox
Dim xx As Int16
Dim WithEvents oo As TextBox

Private Sub Button1_Click() Handles Button1.Click
ReDim Preserve A(cc)
A(cc) = New TextBox
xx = cc + 1
A(cc).Name = "text" & xx
A(cc).Size = New System.Drawing.Size(40, 30)
A(cc).Location = New Point(cc * 40, 0)
Me.Controls.Add(A(cc))
A(cc).Focus()
oo = A(cc)
cc = cc + 1
End Sub

Private Sub oo_TextChanged() Handles oo.TextChanged

熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程,但
唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。
VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,
由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语
句中用 New 关键字、CreateObject 或 GetObject 从部件外面将对象引用赋予变量。
如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引用:

Dim xlApp1 As Excel.Application
Set xlApp1 = New Excel.Application

Dim xlApp As Object '定义存放引用对象的变量。
Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

---- 这些语法很容易造成误导,以为动态加载ActiveX控件也是此方法,可能有朋友也
象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种考
虑,动态加载ActiveX控件是扩展控件集合的方式实现,通过实际摸索,终于就如何实
现动态ActiveX控件找出了一条切实可行的方法,下面以一个具体的实例来详细说明。

一、ActiveX控件

---- ActiveX 控件是 Visual Basic 工具箱的扩充部分。使用 ActiveX 控件的方法与
使用其它标准内装的控件,如 C