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

Posted

技术标签:

【中文标题】如何在 VB.Net winforms 应用程序中找到 main() 入口点?【英文标题】:How to find the main() entry point in a VB.Net winforms app? 【发布时间】:2012-12-27 17:33:33 【问题描述】:

当我在 C# 中创建 WinForms 应用程序时,输出类型为 Windows Application,我得到一个带有 static void Main()program.cs,可用于处理命令行参数等...

但是,当我为 VB 创建一个等效项目时,应用程序类型是 Windows Forms Application,我不得不选择一个启动形式。

在我决定在 VB.Net 中显示哪种表单之前,是否有等效的机制来运行我自己的代码?我假设相同的代码存在但自动生成并隐藏在某处?如果有,在哪里?

【问题讨论】:

Start VB.NET GUI app using Sub Main or form startup object?的可能重复 这讨论了为什么应该做或不做,它没有说如何做...... @Basic 你让它与参数一起工作吗?我使用答案中提到的步骤。但是当我尝试从 cmd 传递参数时它不起作用。我将我的 Main 作为 Public Sub Main (ByVal args As String()),然后使用 Console.WriteLine 将数组的每个元素打印在 a for each ... 我从 cmd 运行应用程序但不打印参数我通过了。请帮忙 @omachu23 它对我来说效果很好,所以你一定做错了什么。我也被 C# 困了很长时间,VB.Net 语法有点生锈。不应该是ByVal args() As String 吗? (注意括号移动)。解决这个问题的最简单方法是使用右上角的按钮并提出问题,然后更多人将能够专注于它 @Basic 我不敢相信我错过了!我改变了它,它现在可以工作了!非常感谢您花时间回答!!干杯 【参考方案1】:

在 VB 中,您需要手动创建子主程序,所以我通常做的是创建一个名为 Program 的新模块。

作为一个非常基本的设置,您需要添加以下代码。

Public Sub Main()

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

End Sub

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

然后,您可以将要在程序打开其主窗体之前运行的任何启动代码放在 Application.Run 行之前。

希望有帮助

【讨论】:

不错的解决方案。如果您使用这种方法,您还需要在您的模块中重新实现任何应用程序事件,例如 Application.ApplicationExit 和 Application.ThreadException 等... 您可以在使用 MyApplication_Startup 事件加载任何表单之前运行代码。请参阅docs.microsoft.com/en-us/dotnet/api/… 了解更多信息。这避免了必须实现 Sub Main()。【参考方案2】:

如果您的应用程序只有一个表单,您可以简单地开始键入 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

【讨论】:

这不是问题,这与启动表单有关,他希望代码能够在启动表单之前运行。接受的答案是正确的。 @MarkHall 是正确的。注意Sub Main()(应用程序的初始入口点)和Sub New()(在这种情况下是表单的构造函数)之间的区别。前者在其他任何东西启动之前执行(没有表单、消息泵等),并允许您处理命令行参数、选择视觉样式和类似的 是的,我不知道原来的问题是处理多个表单。我在上面编辑了我的回复,以澄清 Sub New() 仅在您的应用程序具有单个表单时提供预初始化访问。谢谢你们的cmets。

以上是关于如何在 VB.Net winforms 应用程序中找到 main() 入口点?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET如何在winform中“刷新”数据DbContext

如何在 winform vb.net 上嵌入 Autodesk Viewer

如何在 IconButton VB .NET WinForm 中处理 MouseHover 和 MouseLeave 事件

如何在未安装 office 的情况下从 winform vb.net 2008 导出到 excel?

VB.NET(WinForms)中带参数的安全线程池队列

在 VB .NET 2008 Winform Listview 中禁用复选框选择