Vb.net在文本框中运行脚本

1 vb.net textbox

我想知道是否有一种方法可以执行Textbox1中的脚本,就像您在textbox1中编写此代码一样

msgbox("Hello World")
Run Code Online (Sandbox Code Playgroud)

当您单击按钮或按Enter时,它将运行您在Textbox1中编写的命令/脚本

The*_*Dog 5

是的你可以。这有点杂乱无章,并被网上的各种文章拼凑而成,但是您可以了解一般想法...

Imports System.IO
Imports System.Reflection
Imports System.CodeDom
Imports System.CodeDom.Compiler
Imports Microsoft.VisualBasic
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' read code from textbox
        Dim Code As String = TextBox1.Text
        ' clear output textbox
        TextBox2.Clear()
        ' create fully functional assembly string
        Code = ("Imports System" & vbCrLf &
                "Imports System.Windows.Forms" & vbCrLf &
                "Imports Microsoft.Visualbasic" & vbCrLf &
                "Public Class TempClass" & vbCrLf &
                "Public Sub MyCode(ByVal Textbox2 As TextBox)" & vbCrLf &
                Code & vbCrLf &
                "End Sub" & vbCrLf &
                "End Class")
        ' create the compiler
        Dim vbProv = New VBCodeProvider()
        ' create parameters to pass to the compiler
        Dim vbParams = New CompilerParameters()
        ' add referenced assemblies.  
        vbParams.ReferencedAssemblies.Add("System.dll")
        vbParams.ReferencedAssemblies.Add("System.Windows.Forms.dll")
        vbParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
        ' generate an assembly in memory
        vbParams.GenerateExecutable = False
        vbParams.GenerateInMemory = True
        ' give it a name
        vbParams.OutputAssembly = "MyCode"
        ' compile the code and get the compiler results
        Dim compResults = vbProv.CompileAssemblyFromSource(vbParams, Code)
        ' check for compile errors  
        If compResults.Errors.HasErrors Then
            Dim ErrorMsg As String = compResults.Errors.Count.ToString & " Errors:"
            For x As Integer = 0 To compResults.Errors.Count - 1
                ErrorMsg = ErrorMsg & vbCrLf & "Line: " & compResults.Errors(x).Line.ToString & " - " + compResults.Errors(x).ErrorText
            Next
            TextBox2.Text = ErrorMsg & vbCrLf & vbCrLf + Code
        Else
            ' create instance of the temporary compiled class
            Dim obj As Object = compResults.CompiledAssembly.CreateInstance("TempClass")
            ' use textbox 2 for output
            Dim args() As Object = {Me.TextBox2}
            Try
                ' execute the code  
                Dim result As Object = obj.GetType().InvokeMember("MyCode", BindingFlags.InvokeMethod, Nothing, obj, args)
            Catch Oops As Exception
                ' oops
                MessageBox.Show(Oops.Message)
            End Try
        End If
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明