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

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


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

** 介绍 ** ** **


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

为了展示当你改变控件的值,或者拖一个控件到设计界面时如何检查错误并调试代码,我们将创建一个基于 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";

///

1<summary>
2
3/// A Custom property used for this silly sample 
4
5/// </summary>

///

1<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") 被用来将属性在属性页中排序。

待续……

Published At
Categories with Web编程
Tagged with
comments powered by Disqus