Написание приложения VB.NET для Windows Forms с использованием CodeDom - PullRequest
2 голосов
/ 24 марта 2012

Как написать приложение VB.NET для Windows Forms через CodeDom?

Я перепробовал все, ближе всего я получил код ниже, который в первую очередь показывает окно командной строки, которое не очень хорошо, а затем показывает форму в течение секунды, и все исчезает. Есть ли другой правильный способ сделать это? Пример очень ценится.

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 ]

5 голосов
/ 24 марта 2012

Не работает, потому что вы не звоните 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, измените настройку «Тип приложения» с Консольного приложения на Приложение Windows Forms. Для CodeDom вам нужно установить CompilerOptions для указания /target.

3 голосов
/ 24 марта 2012

Чтобы создать приложение Windows (в отличие от консольного приложения), вы должны указать .CompilerOptions = "/target:winexe" в CompilerParameters, который вы передаете компилятору.

2 голосов
/ 29 марта 2012

После многих исследований в Интернете, я пришел к следующему выводу, который, кажется, работает просто отлично.Спасибо всем за любой вклад в эту тему.

Прежде всего, откройте новый проект и добавьте следующий код к кнопке.Этот код компилирует код, который вы пишете в текстовом файле, который вы создадите на следующем шаге.

  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

Если вы сделали все выше, после нажатия кнопки «Скомпилировать», он должен создать автономный EXE-файл в проектах \ bin \ Debug под именем OutputApp.

Еще раз спасибо всем.Надеюсь, что приведенный выше код будет полезен всем, кто пытается сделать то же самое.

...