可以用VBScript和CallByName函数结合
比如说你要执行msgbox "Hello World!" 这样的语句就这样
Private Sub Command1_Click()Set vbs = CreateObject("MSScriptControl.ScriptControl")
vbs.Language = "VBScript"
vbs.ExecuteStatement (Text1.Text)
End Sub
假如你要执行“Text1.top=0”的话就用CallByName。
要说明的是:
VB6.0里面没有CObj函数,所以不能直接用这个函数把字符串转换成对象(object);
既然你要执行Text1.top=0,那么你的窗体上必须得有一个name属性为Text1的控件,我们可以通过遍历窗体控件的方法得到这个得到这个控件。这里给出一个demo
Option ExplicitPrivate Sub Command1_Click()
Dim obj As Object
Dim ObjName As String
Dim ObjProperty As String
Dim ObjValue As Variant
'获取控件名,控件属性,控件值
ObjName = Split(Text1.Text, ".")(0)
ObjProperty = Split(Split(Text1.Text, ".")(1), "=")(0)
ObjValue = Split(Split(Text1.Text, ".")(1), "=")(1)
'遍历窗体控件,然后运用控件的属性
'VbLet——设置属性
For Each obj In Me.Controls
If obj.Name = ObjName Then
CallByName obj, ObjProperty, VbLet, ObjValue
Exit For
End If
Next
End Sub
效果(执行前):
效果(执行后):
效果(执行前):
效果(执行后):
至于应该用哪个,你可以简单做下判断,比如找下要执行的字符串里面有没有“.”等等,,,自己变通下
VB 关于ExeCuteLine的问题:实际运用时发现,其只能在VB编辑器中生效,如程序Make成exe文件后就不能使用了。后来我找到一种可以代替其功能的方法。实现如下:
在工程中引入Microsoft Script Control,然后通过其实例的.eval函数可以完成同上的功能。且eval函数还可以返回执行的结果。这点比之ExecuteLine更为方便。
例如
tmpStr = scriptControl1.Eval("1 + 2 >4") '用一个字符串变量获取eval的执行结果
执行之后tmpStr的值为"false"。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)