未处理 WinForms 启动事件

WinForms Startup Event not being handled

我在 .NET 5 中有一个 Windows Forms 应用程序,应用程序框架已激活并且启动对象设置为 (my) MainForm.
在应用程序的属性中使用“查看应用程序事件”,我自动生成了 ApplicationEvents.vb 文件,并使用给定的控件自动生成了一个方法来在启动时执行某些操作(据我所知,甚至在 MainForm 加载之前) - 但此方法中没有任何内容 运行,甚至没有触发断点。
我假设为此设计的自动生成的文件中的自动生成的子应该可以工作,并且每个其他事件处理子都可以,只是 Startup 的不会。

这是我的ApplicationEvents.vb(没有自动生成的评论):

Imports Microsoft.VisualBasic.ApplicationServices

Namespace My
    Partial Friend Class MyApplication
        Private Sub MyApplication_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
            Debug.Print("Test")
            MsgBox("Test")
        End Sub
    End Class
End Namespace
背景:

我正在尝试为我的应用程序启用高 DPI 缩放。
为此,我尝试使用 app.manifest 文件(通过应用程序属性中的“查看 Windows 设置”打开),但我在文档中找到的标签组合没有起作用(我是 运行宁 Windows 10 的所需版本)。 app.config 文件也是如此,但我预料到了这一点,因为它是一个 .NET Framework 功能,可以为此使用它。
所以我登陆了 Application.SetHighDpiMode(HighDpiMode)。这在放入 MainFormLoad 事件中时有效,但它只在表单已经加载时执行预期的操作,然后将其放在放大的屏幕上/屏幕放大时它已经加载。 如果它是在一个已经缩放的屏幕上启动的,它看起来很混乱。
所以我认为仅在表单加载时启用它有点太晚了,应该尽快 运行,所以我登陆了启动。

启动对象必须是 Sub Main 才能使启动事件起作用,不是 MainForm(或任何形式)。
(感谢 @Hans Passant 的提示。)

如果以后要更改主窗体,则必须执行以下操作:

  1. 在 Visual Studio 中关闭您的项目。
  2. 在资源管理器中打开项目的文件夹。
  3. 在其中,打开文件夹My Project
  4. 使用任何文本编辑器打开 Application.myapp
  5. <MainForm> 标记之间的表单更改为您的(新)主表单名称。
  6. 保存并关闭。
  7. 使用任何文本编辑器打开 ApplicationDesigner.vb
  8. 找到以下行并将 YourMainFormsName 更改为您的(新)主表单名称:
Protected Overrides Sub OnCreateMainForm()
    Me.MainForm = Global.YourProjectsName.YourMainFormsName
End Sub
  1. 保存并关闭。
  2. 再次打开您的项目并启动它。启动窗体应该已经改变了。

这样您就可以保留应用程序框架而不必自己编写Sub Main