如何通过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
答案 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。
再次感谢大家。 希望上面的代码对任何试图做同样事情的人都有用。