如何调试winforms设计器

时间:2016-05-20 12:51:03

标签: c# winforms debugging windows-forms-designer

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

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

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

  

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

5 个答案:

答案 0 :(得分:3)

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

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

按F11键移动一行。

enter image description here

答案 1 :(得分:2)

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

  • 右键单击解决方案资源管理器中的项目,然后打开属性
  • 在属性页面中,选择调试标签。
  • 开始操作部分中,选择启动外部程序,然后单击按钮以浏览位于其中的Visual Studio可执行文件devenv.exe路径如"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"
  • 保存项目,然后使用 F5 运行。将开设一个新的visual studio实例。
  • 使用新实例打开项目。这使您可以调试包含项目的Visual Studio的先前实例。
  • 在您要调试的文件中放置断点。

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

  • 如果您在设计时遇到异常。
  • 如果您想在设计时调试DesignerTypeConverterUiTypeEditor的行为。

了解更多信息:

答案 2 :(得分:1)

通过以下堆栈溢出问题How does the Winforms Designer instantiate my form?

找到了一篇非常古老(近12年)的博文

博客: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窗体项目中的一个窗体。您的项目名称可能会有所不同

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

enter image description here

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