Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在文本框中运行Vb.net脚本_Vb.net_Textbox - Fatal编程技术网

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

在文本框中运行Vb.net脚本,vb.net,textbox,Vb.net,Textbox,我想知道是否有办法执行Textbox1中的脚本 就像你在textbox1中写的代码一样 msgbox("Hello World") 当您单击按钮或按enter键时,它将运行您在Textbox1中编写的命令/脚本。这基本上允许您在程序中运行编译器。小心,用户可能会在框中键入任何内容,并用它破坏您的程序。您正在寻找的。这基本上允许您在程序中运行编译器。小心,用户可能会在框中键入任何内容,并用它破坏您的程序。是的,您可以。这有点凌乱,是从网络上的各种文章拼凑而成的,但是你得到了大致的想法 Impor

我想知道是否有办法执行Textbox1中的脚本 就像你在textbox1中写的代码一样

msgbox("Hello World")

当您单击按钮或按enter键时,它将运行您在Textbox1中编写的命令/脚本。这基本上允许您在程序中运行编译器。小心,用户可能会在框中键入任何内容,并用它破坏您的程序。

您正在寻找的。这基本上允许您在程序中运行编译器。小心,用户可能会在框中键入任何内容,并用它破坏您的程序。

是的,您可以。这有点凌乱,是从网络上的各种文章拼凑而成的,但是你得到了大致的想法

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


是的,你可以。这有点凌乱,是从网络上的各种文章拼凑而成的,但是你得到了大致的想法

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


可能重复的可能重复的这是一个非常好的CodeDOM新手指南(+1)我喜欢“调试器”部分。请注意,当您将结果程序集写入磁盘时,某些病毒检测器将标记生成的程序集。可能取决于内容/操作,这是一个非常好的CodeDOM新手指南(+1)我喜欢“调试器”部分。请注意,当您将结果程序集写入磁盘时,某些病毒检测器将标记生成的程序集。但可能取决于内容/操作,