使用CodeDom编写VB.NET Windows窗体应用程序

时间:2012-03-24 03:08:32

标签: .net vb.net winforms codedom

如何通过CodeDom编写VB.NET Windows窗体应用程序?

我已经尝试了所有的东西,我最接近它的是下面的代码,首先显示命令提示窗口不好,然后显示表格等一秒钟,一切都消失了。 还有另一种正确的方法吗?非常感谢一个例子。

Public Module MyApp
    Public Sub main()
        Dim NewForm As New System.Windows.Forms.Form
        NewForm.Name = "Form1"
        NewForm.Text = "Form1"
        NewForm.Width = 300
        NewForm.Height = 300
        NewForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
        NewForm.ControlBox = True
        NewForm.MaximizeBox = False
        NewForm.MinimizeBox = True
        NewForm.Show()
    End Sub
End Module

3 个答案:

答案 0 :(得分:5)

它不起作用,因为你没有打电话给Application.Run()。没有它就没有什么能阻止主线程,它会退出,这就是程序和表单的结束。 NewForm.ShowDialog()是另一个便宜的解决方案。

正确的咒语是:

Imports System.Windows.Forms

Public Module MyApp
    Public Sub Main()
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)
        Dim NewForm As New Form
        '' Set properties
        ''...
        Application.Run(NewForm)
    End Sub
End Module

要停止显示控制台窗口,您需要更改EXE类型。 Project + Properties,Application选项卡,将“Application type”设置从Console Application更改为Windows Forms Application。对于CodeDom,您需要设置CompilerOptions以指定/ target。

答案 1 :(得分:3)

要创建Windows应用程序(而不是控制台应用程序),您必须在传递给编译器的.CompilerOptions = "/target:winexe"中指定CompilerParameters

答案 2 :(得分:2)

经过网上的大量研究,我得出以下结论,似乎工作得很好。 感谢大家对此主题的任何意见。

首先打开一个新项目,将以下代码添加到按钮中。 此代码编译您在将在下一步中创建的文本文件中编写的代码。

  Private Sub CompilerButton_Click(sender As System.Object, e As System.EventArgs) Handles CompilerButton.Click
        Dim objCodeCompiler As System.CodeDom.Compiler.ICodeCompiler = New VBCodeProvider().CreateCompiler() ' We create object of the compiler

        Dim objCompilerParameters As New System.CodeDom.Compiler.CompilerParameters()
        ' Add reference
        objCompilerParameters.ReferencedAssemblies.Add("System.dll")
        objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll")
        objCompilerParameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")

        'Compile in memory
        Dim Output1 As String = "OutputApp"
        objCompilerParameters.GenerateExecutable = True
        objCompilerParameters.OutputAssembly = Output1
        objCompilerParameters.CompilerOptions = "/target:winexe"

        Dim strCode As String = My.Resources.TextFile1.ToString
        Dim objCompileResults As System.CodeDom.Compiler.CompilerResults = _
        objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, strCode)

        If objCompileResults.Errors.HasErrors Then
            ' If an error occurs
            MsgBox("Error: Line>" & objCompileResults.Errors(0).Line.ToString & ", " & _
            objCompileResults.Errors(0).ErrorText)
            Exit Sub
        End If

    End Sub

然后在项目资源中添加一个文本文件并将以下代码添加到其中。 此代码是您要编译为独立EXE的应用程序。你可以按照你想要的方式改变它。

Option Strict On
Imports System
Imports System.Windows.Forms
Imports System.Windows.Forms.Form
Imports Microsoft.VisualBasic

Namespace MyApp
    Public Class EntryPoint
        Public Shared Sub Main(args As [String]())
            Dim FrmMain As New Form1
            System.Windows.Forms.Application.Run(FrmMain)
        End Sub
    End Class
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Private WithEvents Button1 As New Button
        Sub New()
            Application.EnableVisualStyles()
            Me.Text = "Form1"
            Button1.Text = "Click Me!"
            Button1.Top = 100
            Button1.Left = 100
            Me.Controls.Add(Button1)
        End Sub
        Private Sub Button1_Click(Sender As Object, E As EventArgs) Handles Button1.Click
            MsgBox("You Clicked Me!")
        End Sub
    End Class
End Namespace

如果您已完成上述所有操作,则在单击compile之后,应在projects \ bin \ Debug下创建名为OutputApp的独立EXE。

再次感谢大家。 希望上面的代码对任何试图做同样事情的人都有用。