如何调试winforms设计器

我的问题不是如何在设计时调试。 我实际上想通过设计器中可用的事件进行调试。 我知道表单有加载和其他类型的事件。 在Windows窗体设计器中是否有任何事件,如init,load等?

我通过用户控件在ASP中进行了类似的调试。 它允许我们在将用户控件添加到设计器之前查看它的输出HTML。

我知道Windows窗体和ASP是不同的,但应该有一些事件在实际渲染之前检查控件的值。

我的表格需要很长时间才能在VS设计师中打开。 所以我将一个调试器附加到VisualStudio(devenv.exe),在我的Form的InitializeComponent中设置一个断点来逐步执行它以查看问题所在。 但是,断点没有被击中。

要在设计器中进行调试,您需要在设计器代码之上放置一个断点。

然后启动您的应用程序,它将在断点处停止。

按F11可以在此时移动一行。

在此处输入图像描述

要调试Windows窗体项目的设计时间:

  • 在解决方案资源管理器中右键单击您的项目并打开属性
  • 在属性页面中,选择“ 调试”选项卡。
  • Start Action部分中,选择Start external program ,然后单击按钮以浏览Visual Studio可"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"
  • 保存项目,然后使用F5运行。 将开设一个新的visual studio实例。
  • 使用新实例打开项目。 这使您可以调试包含项目的Visual Studio的先前实例。
  • 将断点放在要在其中调试的文件中。

我什么时候才能发现这种方法有用?

  • 当您在设计时遇到exception时。
  • 如果要在设计时调试DesignerTypeConverterUiTypeEditor的行为。

欲获得更多信息:

  • 演练:在设计时调试自定义Windows窗体控件

通过以下堆栈溢出问题找到了一篇非常古老(近12年)的博客文章Winforms Designer如何实例化我的表单?

博客: https : //blogs.msdn.microsoft.com/rprabhu/2004/12/12/how-does-the-windows-forms-designer-in-visual-studio-load-a-form/

上面的博客引用了我的正确方向

好吧,设计师根本没有真正实例化Form1。 它正在创建Form1的基类的实例

根据上面的引用,按照以下步骤找到使设计器变慢的代码

1)创建一个扩展Form的类并将其添加到winforms项目中

 public class DebuggableForm : Form { public DebuggableForm() { //Put your code in InitializeComponent method here. //Through line-by-line debugging you can find //which line is making the designer slow } } 

2)扩展上面的类而不是直接扩展Form1.cs中的Form。 这里Form1是表单的名称,检查项目中的相应表单名称

 public class Form1: DebuggableForm { //Your actual form code } 

3)在步骤1中创建的类的构造函数中放置一个断点( DebuggableForm

4)将您的项目附加到另一个VS实例并在新VS中打开一个项目

5)在新打开的项目中打开form1.cs并再次执行步骤2。

6)打开设计器或双击解决方案资源管理器中的Form1。 您的DebuggableForm中的调试器将被命中

注意:上述步骤中的Form1.cs引用了Windows窗体项目中的窗体。 名称可能因项目而异

您可以使用另一个Visual Studio实例调试Visual Studio: https : //stackoverflow.com/a/7757140/343309

如果遇到设计时错误而无法恢复设计视图,则可以打开另一个visual studio并附加当前的visual studio进程进行调试。

在此处输入图像描述

转到工具→选项→从左窗格窗口展开调试→启用我的代码[只需选中此复选框]→确定。