VB.NET能否用代码执行代码?
RT。
例如一个FORM上有一个TEXTBOX,用户输入一个字符串:
msgbox "Test ok!"
如何执行这句代码?
问题点数:20、回复次数:11Top
1 楼Gerryjiang(下一站)回复于 2006-03-13 11:13:26 得分 0
你要自己定义你的命令行在程式里了Top
2 楼43720938(烦烦烦烦)回复于 2006-03-13 11:16:39 得分 0
用TEXTBOX_Change事件可以做到Top
3 楼ddvddvddv()回复于 2006-03-13 11:35:37 得分 0
各位能否讲的具体点?Top
4 楼lifengguo(黎锋果)回复于 2006-03-13 12:55:55 得分 0
如楼上:43720938(烦) ( ) 信誉:100Top
5 楼sz_lgp(longguoping)回复于 2006-03-13 12:56:55 得分 0
你是说在TEXTBOX输入msgbox "Test ok!"后程序执行 msgbox "Test ok!"吗?
可以textbox.keydwon事件中处理,不能直接执行msgbox "Test ok!"Top
6 楼ddvddvddv()回复于 2006-03-13 13:32:01 得分 0
楼上的理解正确!我想直接执行一句(或一段)代码:
例如
msgbox "Test ok!" 或
lable1.txt="asdasd"
这样的功能如何实现?Top
7 楼drk928(一起看斜阳)回复于 2006-03-13 15:11:58 得分 13
调用编译器编译执行代码字符串
关于CodeDom,我倒是稍有些心得,下面这个你贴上去运行试试:
Private Function GetJedgement(ByVal Expression As String) As Boolean
Dim Comp As ICodeCompiler = New VBCodeProvider().CreateCompiler
Dim cp As CompilerParameters = New CompilerParameters
Dim _Compiled As Object = Nothing
cp.ReferencedAssemblies.Add("system.dll")
cp.ReferencedAssemblies.Add("system.data.dll")
cp.ReferencedAssemblies.Add("system.xml.dll")
cp.GenerateExecutable = False
cp.GenerateInMemory = True
'dim CodeBuilding as
Dim code As String
code = "Imports System " & vbCrLf & _
"Imports System.Data " & vbCrLf & _
"Imports System.Xml " & vbCrLf & _
"Public Class Judgement " & vbCrLf & _
" Public Function GetJude() as Object " & vbCrLf & _
" Return (" & Expression & ") " & vbCrLf & _
" End Function " & vbCrLf & _
"End Class "
Dim cr As CompilerResults = Comp.CompileAssemblyFromSource(cp, code.ToString())
Debug.Write(code.ToString)
If (cr.Errors.HasErrors) Then
Dim ErrorMessage As String
ErrorMessage = "编译错误:" & vbCrLf
Dim Err As CompilerError
For Each Err In cr.Errors
ErrorMessage = ErrorMessage & Err.ErrorText & vbCrLf
Next
Debug.WriteLine(ErrorMessage)
#If DEBUG Then
Stop
#Else
Throw New Exception("编译错误: " + ErrorMessage)
#End If
End If
Dim a As System.Reflection.Assembly = cr.CompiledAssembly
_Compiled = a.CreateInstance("Judgement")
Dim mi As MethodInfo = _Compiled.GetType().GetMethod("GetJude")
Return (CType(mi.Invoke(_Compiled, Nothing), Boolean))
End Function
'测试
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As String = "6"
Dim tmp As String = x & ">5 And " & x & "<10"
MsgBox(GetJedgement(InputBox("输入表达式:", , tmp)))
End Sub
Top
8 楼naturalth(自我批判,是思想、品德、素质、技能创新的优良工具)回复于 2006-03-13 16:38:17 得分 2
把你mail给我,我发一份给你Top
9 楼seeJessica(计院洲洲)回复于 2006-03-14 03:33:30 得分 5
利用System.codedom 生成一个C/S程序集 使用发射机制调用元数据---MethodInfoTop
10 楼ddvddvddv()回复于 2006-03-14 07:57:42 得分 0
我的邮箱sqjtjxq@163.com
我想做这方面的一些程序:
程序员是程序的设计者和一级用户,
程序的二级用户负责程序的二次开发和实施。
程序的三级用户才是最终的用户。
各位谁有兴趣可以一起探讨一下,
naturalth有现成的例子没有发一份给我吧!谢谢!Top
11 楼ddvddvddv()回复于 2006-03-14 08:03:03 得分 0
我的qq:76997643Top




