我的问题不是如何在设计时调试。我实际上想通过设计器中可用的事件进行调试。我知道表单有加载和其他类型的事件。 Windows窗体设计器中是否有任何事件,如init,load等?
我通过用户控件在ASP中进行了类似的调试。它允许我们在将用户控件添加到设计器之前查看它的输出HTML。
我知道Windows窗体和ASP是不同的,但应该有一些事件在实际渲染之前检查控件的值。
My Form需要很长时间才能在VS设计师中打开。所以我附上了一个 调试器到VisualStudio(devenv.exe),在我的表单中设置一个断点 InitializeComponent逐步执行它以查看问题所在。 但是,断点没有被击中。
答案 0 :(得分:3)
答案 1 :(得分:2)
调试Windows窗体项目的设计时间:
devenv.exe
路径如"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"
我什么时候才能发现这种方法有用?
Designer
或TypeConverter
或UiTypeEditor
的行为。了解更多信息:
答案 2 :(得分:1)
通过以下堆栈溢出问题How does the Winforms Designer instantiate my form?
找到了一篇非常古老(近12年)的博文以上博客引用我的方向指出正确的方向
嗯,设计师根本没有真正实例化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)
转到工具→选项→从左窗格窗口展开调试→启用我的代码[只需选中此复选框]→确定。