如何在VB.Net Winforms应用程序中找到main()入口点?

36

当我使用C#创建WinForms应用程序时,输出类型为Windows Application,并且我会得到一个program.cs文件,其中包含static void Main(),我可以在其中处理命令行参数等...

然而,当我为VB创建等效项目时,应用程序类型为Windows Forms Application,我被迫选择一个启动窗体。

在VB.Net中是否有等效机制可以在决定显示哪个窗体之前运行自己的代码? 我假设相同的代码存在但是自动生成并隐藏在某个地方? 如果是这样,它会在哪里?


2
这讨论了为什么应该这样做或不应该这样做,而不是如何去做... - Basic
@Basic 你能用参数让它工作吗?我使用了答案中提到的步骤。但是当我尝试从cmd传递参数时,它不起作用。我的Main函数是Public Sub Main(ByVal args As String()),然后在for each循环中打印数组的每个元素...使用Console.WriteLine...我从cmd运行应用程序,但没有打印我传递的参数。请帮忙解决一下。 - CodeEngine
1
@omachu23,这对我来说很好用,所以你可能做错了一些事情。我也被困在C#中很长时间了,VB.Net语法有点生疏。那不应该是 ByVal args() As String 吗?(注意括号移动)。最简单的解决方法是使用右上角的按钮提问,这样更多的人就能关注它了。 - Basic
1
@Basic 我简直不敢相信我错过了那个!我改了一下,现在它可以工作了!非常感谢您抽出时间来回答!!干杯 - CodeEngine
2个回答

57

在VB中,您需要手动创建子主函数,因此我通常会创建一个名为"Program"的新模块。在那个里面,作为非常基本的设置,您需要添加以下代码。

Public Sub Main()

    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(False)
    Application.Run(New Form1)

End Sub

完成后,转到项目设置的应用程序选项卡,取消选择“启用应用程序框架”选项,然后在“启动对象”下拉列表中选择新的Sub Main过程。

然后,在Application.Run行之前插入任何要在程序打开其主窗体之前运行的起始代码。

希望这能帮到你。


1
不错的解决方案。如果您采用这种方法,您还需要重新实现模块中的任何应用程序事件,例如Application.ApplicationExit和Application.ThreadException等... - Richard Moore
1
你可以在任何窗体加载之前使用 MyApplication_Startup 事件运行代码。请参见 https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.applicationservices.windowsformsapplicationbase.startup?view=netframework-4.8 以获取更多信息。这可以避免实现 Sub Main()。 - unintentionally left blank

0
如果你的应用程序只有一个窗体,你可以直接开始编写 Sub New(),Visual Studio 将自动生成这个方法桩并且首先执行。不需要更改任何项目设置。
Public Sub New()
    MyBase.New()

    'This call is required by the Windows Form Designer.
    InitializeComponent()

    'Add any initialization after the InitializeComponent() call
    '==> Put your pre-execution steps here.
End Sub

2
那不是问题所在,这与启动窗体相关,他想要在启动窗体之前运行代码。被接受的答案是正确的。 - Mark Hall
@MarkHall 是正确的。请注意 Sub Main()(应用程序的初始入口点)和 Sub New()(在这种情况下是窗体的构造函数)之间的区别。前者在任何其他内容启动之前执行(没有窗体、消息泵等),允许您处理命令行参数、选择视觉样式等。 - Basic
是的,我没有意识到原问题涉及多个表单。我编辑了上面的回答以澄清当您的应用程序只有一个表单时,Sub New()仅提供预初始化访问。感谢您的评论。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接