vb通过类如何控制组件数组?比如textbox。 30
类中代码如下:PrivateWithEventsText1AsTextBoxPrivateformrsAsNewADODB.RecordsetPublicSubAttac...
类中代码如下:
Private WithEvents Text1 As TextBox
Private formrs As New ADODB.Recordset
Public Sub Attach(textName As TextBox)
Set Text1 = textName
End Sub
Private Sub Text1_Change()
MsgBox "aaa"
End Sub
form中调用的代码如下:
Private abc As New Class2
Private Sub Form_Load()
abc.Attach Text1
End Sub
问题:
我将text1中的index设置为'0'时,也就是让它变成数组时这段程序报“类型不匹配错误”!如果不设置为'0',这段程序正确!
请高手告诉我如何用类控制组件数组! 展开
Private WithEvents Text1 As TextBox
Private formrs As New ADODB.Recordset
Public Sub Attach(textName As TextBox)
Set Text1 = textName
End Sub
Private Sub Text1_Change()
MsgBox "aaa"
End Sub
form中调用的代码如下:
Private abc As New Class2
Private Sub Form_Load()
abc.Attach Text1
End Sub
问题:
我将text1中的index设置为'0'时,也就是让它变成数组时这段程序报“类型不匹配错误”!如果不设置为'0',这段程序正确!
请高手告诉我如何用类控制组件数组! 展开
展开全部
1.最简单的给窗体添加新控件的办法:设计时窗口上放置一个 text1(0)
需要增加新的text的时候,代码:load text1(1)......
第n个 ..... load text1(n)
2. 使用
dim oobj as textbox
Set oObj = me.Controls.Add("vb.TextBox", "控件名", 容器对象)
容器对象可以为窗口、图片 frame等;
对oobj设置控件的大小等属性
为了便于管理,可以用一个集合来保存你动态创建的全部控件
当然,它本来就在集合controls里,你可以通过controls找到,并访问。
需要增加新的text的时候,代码:load text1(1)......
第n个 ..... load text1(n)
2. 使用
dim oobj as textbox
Set oObj = me.Controls.Add("vb.TextBox", "控件名", 容器对象)
容器对象可以为窗口、图片 frame等;
对oobj设置控件的大小等属性
为了便于管理,可以用一个集合来保存你动态创建的全部控件
当然,它本来就在集合controls里,你可以通过controls找到,并访问。
更多追问追答
追问
我的程序中有很多个form,每个form中都有text1数组,而且对每个text1都要做相同事件的操作(比如都有判断是否输入的是数字等等)。所以我想把他们放到一个类里面进行统一的管理,但是不知道数组的怎么传到类里面!
您告诉我的这个方法貌似解决不了我的问题啊!但也十分感谢!
追答
你这样搞的话,做个自定义text控件会好些,里面封装校验的代码。
灵活的办法是写一个数值校验过程,在keypress事件中调用,给你个。
调用说明:Sub_CheckNum keyascii,textbox.text
Sub Sub_CheckNum(ByRef iPressKey As Integer, Optional sStr = "")
sStr = Trim(sStr)
If Len(sStr) = 0 Then
'1处理自然数输入的情况
Select Case iPressKey
Case 48 To 57, 8, 13 '8是backspace,131enter
'处理数字字符问题
Case Else:: iPressKey = 0
End Select
Else
'2处理浮点数输入的情况
Select Case iPressKey
Case 45 '处理负号字符问题
If InStr(sStr, "-") > 0 Then: iPressKey = 0
Case 48 To 57, 8, 13 '处理数字字符问题
Case 44: If sStr = "" Then iPressKey = 0 '处理逗号字符问题
Case 46 '处理小数点字符问题
If InStr(sStr, ".") > 0 Then: iPressKey = 0
Case Else:: iPressKey = 0
End Select
End If
End Sub
展开全部
就楼主的代码要实现的功能来说,用了控件数组就不需要用类了
直接在form的代码中写:
Private Sub Text1_Change(Index As Integer)
MsgBox "aaa"
End Sub
如果用控件数组和类,form_load中的代码应改为:
abc.Attach Text1(0)
但是,这运在运行到Set Text1 = textName时引发“对象或类不支持事件集”,貌似数组中的控件无法被赋给withevents的变量,目前还没有找到解决办法
直接在form的代码中写:
Private Sub Text1_Change(Index As Integer)
MsgBox "aaa"
End Sub
如果用控件数组和类,form_load中的代码应改为:
abc.Attach Text1(0)
但是,这运在运行到Set Text1 = textName时引发“对象或类不支持事件集”,貌似数组中的控件无法被赋给withevents的变量,目前还没有找到解决办法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private WithEvents Text1(2) As TextBox
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询