怎样把字符串转换成对象??请高手救命
dim str1,str2 as string
str1="text1"
str2="setfocus"
callbyname str1,str2,vbmethod
callbyname中str1是错误的,怎样才能把str1转换成对象让callbyname顺利调用
问题点数:29、回复次数:12Top
1 楼foolishtiger(冬蛩)回复于 2001-12-14 11:19:16 得分 10
Dim str1 as Object
set str1=Text1Top
2 楼bJiao(乱搞)回复于 2001-12-14 11:28:07 得分 0
to foolishtiger
这种方法不能解决问题,我得str1只能是string,是从其他字符串得到的,而callbyname调用的对象名是str1Top
3 楼foolishtiger(冬蛩)回复于 2001-12-14 11:41:51 得分 0
Dim objTest as Object
Select Case str1
Case "Text1"
Set objTest=Text1
Case "Text2"
Set objTest=Text2
Case Else
Set objTest=Nothing
End Select
然后引用objTest进行操作.Top
4 楼yangzhaoyu(老妖)回复于 2001-12-14 11:56:49 得分 10
参考这个
Private Sub Command1_Click()
Dim objTest As Object
Dim strT1 As String
Dim strT2 As String
strT1 = Text1.Text
strT2 = Time
For Each objTest In Form1
If objTest.Name = strT1 Then
w ByVal objTest, strT2
Exit For
End If
Next
End Sub
Private Function w(ByVal l As Object, l2 As String)
l.Caption = l2
End Function
Top
5 楼bJiao(乱搞)回复于 2001-12-14 12:15:32 得分 0
to foolishtiger
case语句有多少分支是不知道的,所以这样也不能解决问题Top
6 楼foolishtiger(冬蛩)回复于 2001-12-14 12:21:30 得分 0
其实这个困难是由你的callbyname过程造成的.
你应该把精力花在怎么样把callbyname改得更合理.不要在这些牛角尖上浪费时间.Top
7 楼bJiao(乱搞)回复于 2001-12-14 12:26:10 得分 0
callbyname是微软的过程,如果能改的话就好了Top
8 楼yuminggang(独行侠)回复于 2001-12-14 12:36:03 得分 9
你甭找了,没有解决的办法。
不过yangzhaoyu(老妖) 的方法是可以的,我就是这么实现一个通用的增删改程序的。
不过最好把对象的名称,写到数据库里。Top
9 楼foolishtiger(冬蛩)回复于 2001-12-14 12:59:00 得分 0
完全可以避开用CallByName的.Top
10 楼bJiao(乱搞)回复于 2001-12-14 17:36:39 得分 0
我的问题和于明刚是一样,就是从数据库里取出对象的名称的,但取出时是STRING类型,所以就碰到怎样转换成对象的问题了。
于明刚能说得详细点吗?老妖的程序一时没有看懂Top
11 楼bJiao(乱搞)回复于 2001-12-14 17:39:33 得分 0
给大家发分了Top
12 楼yuminggang(独行侠)回复于 2001-12-17 13:15:08 得分 0
你可以这样做,把控件的名称写在一个表里,还有这个控件对应的方法(如果有必要的话)。
举个例子:比如说你有一个FORM,FORM里有一个控件名称是A,A有一个属性是TEXT,现在你要通过数据库里的记录和通用的程序给这个控件赋值。
那么,首先从数据库里按一定条件取出一条记录,得知控件的名称和属性,那么可以在此FORM里用FOR EACH,来循环所有控件,用FORM里的每个控件的名称和数据库里取出的控件名称进行比较。如果相同那么使用CALLBYNAME,通过数据库里取出的控件名称和属性/方法,进行取值/赋值/调用方法的操作。
我个人体会是进行方法的调用是比较实际而可用的,进行通用增删改也是一种比较好的方法。
Top




