• 如何:.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中。

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

  • 相关阅读:
    GeoServer发布Shapfile、PostGIS数据
    Geoserver+Openlayers+MySQL设计思想,GeoServer服务器搭建(Docker构建镜像)
    Linux 输入输出重定向, &>file, 2>&1, 1>&2
    Git常用命令
    Java 操作 HBase 教程
    NATAPP--实现SSH内网穿透
    Spring boot banner
    ingress 密码验证
    rook 记录
    容器网络之网桥
  • 原文地址:https://www.cnblogs.com/king_astar/p/1592416.html
Copyright © 2020-2023  润新知