本文内容
创建自定义控件时,通常会发现有必要调试其设计时行为。 如果要为自定义控件创作自定义设计器,则尤其如此。 有关详细信息,请参阅演练:创建一个利用 Visual Studio 设计时功能的 Windows 窗体控件。
可以使用 Visual Studio 调试自定义控件,就像调试任何其他 .NET Framework 类一样。 区别在于,你将调试运行自定义控件代码的 Visual Studio 的单独实例。
重要
本文主要适用于使用 .NET Framework Windows 窗体的经典进程内设计器。 这些程序可能不直接适用于面向 .NET(而不是 .NET Framework)的项目,也不完全兼容。
对于 .NET Framework 项目,设计器中完全支持使用平台目标设置编译的任何或 x64 的项目。 使用 ActiveX、COM 或其他 32 位组件的项目可能存在兼容性问题。 Out-Of_Process 框架设计器(目前为预览版)解决了其中许多兼容性问题。 但是,设计时功能可能无法像 64 位 In-Process 设计器那样良好地工作。 若要启用进程外框架设计器,请导航到“工具”>“选项”>“环境”>“预览功能”。
有关进程外设计器的详细信息,请参阅设计器自 .NET Framework 以来的更改。
第一步是创建应用程序项目。 你将使用此项目生成托管自定义控件的应用程序。
在 Visual Studio 中,创建一个 Windows 应用程序项目,并将其命名 DebuggingExample。
将 Windows 控件库 项目添加到解决方案。
将新的 UserControl 项添加到 DebugControlLibrary 项目。 将其命名 DebugControl。
在 解决方案资源管理器中,通过删除具有 UserControl1 基名称的代码文件来删除项目的默认控件。
生成解决方案。
此时,你将能够在 工具箱中看到自定义控件。
若要检查进度,请找到名为 DebugControlLibrary 组件的新选项卡 并单击以将其选中。 打开该控件时,会看到控件作为 DebugControl 列出,旁边有默认图标。
为了演示自定义控件的代码在设计时正在运行,你将添加一个属性并在实现该属性的代码中设置断点。
在 代码编辑器中打开 DebugControl。 将以下代码添加到类定义:
Private demoStringValue As String = Nothing <BrowsableAttribute(true)> Public Property DemoString() As String Get Return Me.demoStringValue End Get Set(ByVal value As String) Me.demoStringValue = value End Set End Property
private string demoStringValue = null; [Browsable(true)] public string DemoString { get { return this.demoStringValue; } set { demoStringValue = value; } }
生成解决方案。
若要调试自定义控件的设计时行为,请将自定义控件类的实例放置在主机窗体上。
在“DebuggingExample”项目中,在 Windows 窗体设计器中打开 Form1。
在 工具箱中,打开 DebugControlLibrary 组件 选项卡,并将 DebugControl 实例拖到窗体上。
在 属性 窗口中查找
DemoString
自定义属性。 请注意,可以像更改任何其他属性一样更改其值。 另请注意,选择DemoString
属性时,属性的说明字符串将显示在 属性 窗口底部。
若要调试自定义控件的设计时行为,需要调试运行自定义控件代码的 Visual Studio 的单独实例。
右键单击 解决方案资源管理器 中的 DebugControlLibrary 项目,然后选择 属性。
在 DebugControlLibrary 属性表中,选择 “调试” 选项卡。
在 启动操作 部分中,选择 启动外部程序。 你会调试 Visual Studio 的单独实例,因此请单击省略号 (
) 按钮以浏览 Visual Studio IDE。 可执行文件的名称 devenv.exe,如果安装到默认位置,则其路径为 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<版本>\Common7\IDE。
选择 “确定”以关闭对话框。
右键单击 DebugControlLibrary 项目,然后选择“设置为启动项目” 以启用此调试配置。
现在,自定义控件在设计模式下运行,因此可以对其进行调试。 启动调试会话时,将创建 Visual Studio 的新实例,并使用它加载“DebuggingExample”解决方案。 在 窗体设计器中打开 Form1 时,将创建自定义控件的实例,并开始运行。
打开“代码编辑器”中的“DebugControl”源文件,并在
DemoString
属性的Set
访问器上放置一个断点。按 F5 启动调试会话。 会创建 Visual Studio 的新实例。 可以通过两种方式区分实例:
调试实例的标题栏中显示“正在运行”一词
调试实例的“调试”工具栏上禁用了“开始”按钮
断点在调试实例中进行设置。
在 Visual Studio 的新实例中,打开“DebuggingExample”解决方案。 可以通过在 “文件” 菜单中选择 “最近项目” 来轻松找到解决方案。 “DebuggingExample.sln”解决方案文件将列为最近使用的文件。
重要
如果要调试 .NET 6 或更高版本的 Windows 窗体项目,请不要加载项目,请改用 Visual Studio 的此实例将调试器附加到 DesignToolsServer.exe 进程。 选择“调试”>“附加到进程”菜单项。 在进程列表中查找 DesignToolsServer.exe,然后按 附加。 有关详细信息,请参阅自 .NET Framework 以来的设计器更改。
在 窗体设计器 中打开 Form1,然后选择 DebugControl 控件。
更改
DemoString
属性的值。 提交更改时,Visual Studio 的调试实例将获得焦点并在断点处停止执行。 可以像处理任何其他代码一样单步执行属性访问器。若要停止调试,请退出 Visual Studio 的托管实例,或在调试实例中选择 停止调试 按钮。
现在可以在设计时调试自定义控件,因此可以扩展控件与 Visual Studio IDE 的交互。
可以使用 Component 类的 DesignMode 属性编写仅在设计时执行的代码。 有关详细信息,请参阅 DesignMode。
可以向控件的属性应用多个属性,以操作自定义控件与设计器的交互。 可以在 System.ComponentModel 命名空间中找到这些属性。
可以为自定义控件编写自定义设计器。 这样就可以使用 Visual Studio 公开的可扩展设计器基础结构完全控制设计体验。 有关详细信息,请参阅演练:创建一个利用 Visual Studio 设计时功能的 Windows 窗体控件。