如何:.NET 组件/控件在设计时的调试

本文主要介绍如何在设计时对组件的调试,多数情况开发人员用MessgeBox来弹出信息进行调试,但无法进入到代码内部。因此本文以图解的方式来介绍。本文参考了微软MSDN中《演练:设计时调试自定义 Windows 窗体控件》,鉴于其中文版翻译很晦涩,建议大家参考本文

 

背景知识介绍

需要了解组件和控件的区别, 组件编程的大概方向,以及.NET提供哪些服务(组件)来支持组件编程及设计时的事件。

image

有兴趣可以参考:

.net控件编程 - 资料篇

 

STEP BY STEP 调试

组件设计时的调试对象为两个:
一种对象是我们关注的组件本身。另一种则是组件的设计器。

举例一个组件MyComponet有一个属性,我需要在设置值的时候,进行调试更踪。

    private string demoStringValue = null;
        [Browsable(true)]
        public string DemoString
        {
            get
            {
                return this.demoStringValue;
            }
            set
            {
                demoStringValue = value; //设置æ-­ç‚¹
            }
        }

准备工作
1.创建一个library,并创建MyComponent组件,添入以上代码,并编译。
2.加入一个调试用的windows application项目TestMyComponent.
3. 设置library项目为启动项目,在属性中调试中设置启动外部程序,
设定VS的位置:
如:
D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe

image

继续下去   

1. 按F5开始调试过程。这时会有一个新的VS.NET实例被启动。我们在新vs中重新加载此解决方案。

image

4. 在windows application工程中,双击Form1打开之。
5.     在工具栏中拖入MyComponent到Form1,   
6. 在属性页中,改变DemoString属性的值为Good bye。   
7. 此时应当步入断点所在处。

image

我们已经介绍了调试组件本身。

有时候,我们会自定义设计器来实现一些特定的功能。

比如:我们要捕捉组件被加入的事件,组件被移除的事件。要解决的是访问设计时的服务。

让某控件或组件都可以通过定义设计器标签来制定自定义的设计器。

clip_image001

而在设计器中要想触发对应的事件,就必须取得服务对象并挂接对应事件。

自定义设计器必须从ControlDesigner或者ComponentDesigner继承

clip_image002

自定义初始化,并加入一个初始化化服务对象的私有方法:

clip_image003

可以访问的服务:

clip_image004

比如:我们关注的控件的加入或移除事件

clip_image005

ComponentAdded的事件

clip_image006

在这里设置断点,并重复刚才的调试动作。所不同的最后两部,

我们将控件或组件,拖入到form1时候,这时候调试进入到了Designer中。

到此为止,两种类型调试结束了。

原文地址:https://www.cnblogs.com/king_astar/p/1592416.html