如何在.NET中调试设计时(design-time)控件(上)

    技术2022-05-11  72

    说明:本文翻译自msdn网站上的《Debugging Design-Time Controls》一文。文章的原作者是Steve Lasker。

     

    摘要:逐步介绍了如何在VS.NET Designer环境下调试Design-Time的自定义控件,同时描述了在使用设计界面操作控件时可能发生的一系列事件。

     

    介绍

     

    在自定义控件开发过程中的一个重要部分,是检查和调试代码的能力。当在VS.NETDesign-Time环境中使用控件或者Windows Form时,即使在你的项目并没有运行(run)的情况下,你的代码仍能够被执行(execute)。这一点使得如何调试代码成为一个挑战。如果你曾经创建过任何会在Design-Time用到的对象,那么这篇文章将告诉你,当你在VS.NETdesigner中使用这些对象时,如何发现错误并调试代码。我同时也将描述在使用设计界面操作控件时有可能发生的一系列事件。

     

    为了展示当你改变控件的值,或者拖一个控件到设计界面时如何检查错误并调试代码,我们将创建一个基于WinForm的例子,它有一个string属性。当我们改变了属性的值时,我们将步入调试器中。

     

    建立环境

    第一步是建立一个容纳我们的代码的环境,我们将创建:

    ·一个空的解决方案来容纳我们的工程

    ·一个控件库来容纳我们的自定义控件

    ·一个WinForm程序来使用我们的自定义控件

     

    建立空解决方案

    1.   File菜单中点击New,然后选择Blank Solution。

    2.   Solution命名为DesignTimeDebugging

    3.   将此Solution放在c:/ DesignTimeDebugging。如下图:

     

    创建空间库

    由于我们的目标是示范如何调试而非如何创建自定义控件,因此我们不关心控件创建的细节。我们将创建一个具有一个属性的简单的Form

     

    建立控件工程

    1.   File菜单中点击New,然后点击Project

    2.   在左边的窗口里选Visual C# Projects

    3.   在右边的窗口里选Windows Control Library

    4.   将控件库命名为Immedient.Windows.Forms,注意我们保持与微软相同的命名规则,唯一不同的是我们用“Immedient”代替了“System”。这样就定义了一个唯一的名字空间。

    5.   删除UserControl1

     

    添加一个新的Form

    1.   右击Control Library工程,点Add,然后点Add Windows Form

    2.   Form命名为“Form”。

    3.   在类定义中添加如下代码:

    C#

    private string _myText = "Hello";

    /// <summary>

    /// A Custom property used for this silly sample

    /// </summary>

    /// <value>A value of no meaning</value>

    [

       Description("A Custom property used for this silly sample"),

       DefaultValue("Hello"),

       Category("Appearance")

    ]

    public string MyText

    {

       get{return _myText;}

       set

       {

          if(_myText != value)

          {

             _myText = value;

          }

       }

    }

    代码Description("A Custom property used for this silly sample")将在属性页的下方为你的属性添加描述。这里的文字通常与Xml注视文档中的相同。

    DefaultValue("Hello")定义了我们的属性的缺省值。如果属性的值与DefaultValue不同,属性页将以黑体显示该值。同时,VS.NET也将在InitializeComponent()中生成设置该值的代码。这一点对于继承非常好用。如果没有派生类改变属性,那么它们都将继承来自基类的改变。

    Category("Appearance")被用来将属性在属性页中排序。

     

    待续……


    最新回复(0)