未处理 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)
。这在放入 MainForm
的 Load
事件中时有效,但它只在表单已经加载时执行预期的操作,然后将其放在放大的屏幕上/屏幕放大时它已经加载。
如果它是在一个已经缩放的屏幕上启动的,它看起来很混乱。
所以我认为仅在表单加载时启用它有点太晚了,应该尽快 运行,所以我登陆了启动。
启动对象必须是 Sub Main
才能使启动事件起作用,不是 MainForm
(或任何形式)。
(感谢 @Hans Passant 的提示。)
如果以后要更改主窗体,则必须执行以下操作:
- 在 Visual Studio 中关闭您的项目。
- 在资源管理器中打开项目的文件夹。
- 在其中,打开文件夹
My Project
。
- 使用任何文本编辑器打开
Application.myapp
。
- 将
<MainForm>
标记之间的表单更改为您的(新)主表单名称。
- 保存并关闭。
- 使用任何文本编辑器打开
ApplicationDesigner.vb
。
- 找到以下行并将 YourMainFormsName 更改为您的(新)主表单名称:
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.YourProjectsName.YourMainFormsName
End Sub
- 保存并关闭。
- 再次打开您的项目并启动它。启动窗体应该已经改变了。
这样您就可以保留应用程序框架而不必自己编写Sub Main
。
我在 .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)
。这在放入 MainForm
的 Load
事件中时有效,但它只在表单已经加载时执行预期的操作,然后将其放在放大的屏幕上/屏幕放大时它已经加载。
如果它是在一个已经缩放的屏幕上启动的,它看起来很混乱。
所以我认为仅在表单加载时启用它有点太晚了,应该尽快 运行,所以我登陆了启动。
启动对象必须是 Sub Main
才能使启动事件起作用,不是 MainForm
(或任何形式)。
(感谢 @Hans Passant 的提示。)
如果以后要更改主窗体,则必须执行以下操作:
- 在 Visual Studio 中关闭您的项目。
- 在资源管理器中打开项目的文件夹。
- 在其中,打开文件夹
My Project
。 - 使用任何文本编辑器打开
Application.myapp
。 - 将
<MainForm>
标记之间的表单更改为您的(新)主表单名称。 - 保存并关闭。
- 使用任何文本编辑器打开
ApplicationDesigner.vb
。 - 找到以下行并将 YourMainFormsName 更改为您的(新)主表单名称:
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.YourProjectsName.YourMainFormsName
End Sub
- 保存并关闭。
- 再次打开您的项目并启动它。启动窗体应该已经改变了。
这样您就可以保留应用程序框架而不必自己编写Sub Main
。