创建   ValueButtonLib   控件库和   ValueButton   控件     
    
  在“文件”菜单上,指向“新建”,然后单击“项目”以打开“新建项目”对话框。     
  在“C#   项目”列表中,选择“Windows   控件库”项目模板,然后在“名称”框中键入   ValueButtonLib。     
  注意   Windows   控件库模板在   Visual   Basic   和   Visual   C#   .NET   的标准版中不可用。有关更多信息,请参阅   Visual   Basic   标准版功能或   Visual   C#   标准版的功能。   
  默认情况下,项目名称   ValueButtonLib   也会分配到根命名空间中。根命名空间用于限定程序集中的组件名。例如,如果两个程序集都提供名为   ValueButton   的组件,则可以使用   ValueButtonLib.ValueButton   指定   ValueButton   组件。   
  在解决方案资源管理器中,右击   UserControl1.cs,并从快捷菜单中选择“查看代码”。     
  找到   class   语句   public   class   UserControl1,将   UserControl1   更改为   ValueButton   以更改组件的名称。     
  找到构造函数   public   UserControl1(),将它更改为   public   ValueButton()。     
  在   Class   语句,将该控件从   System.Windows.Forms.UserControl   继承的类型更改为   System.Windows.Forms.Button。这允许继承的控件继承   Button   控件的所有功能。     
  在解决方案资源管理器中,单击   UserControl1.cs,并在“属性”窗口中,将   FileName   属性更改为   ValueButton.cs。     
  从“文件”菜单中,选择“全部保存”来保存项目。     
  注意,设计器已不再可用。因为   Button   控件自己完成绘制,所以无法在设计器中修改它的外观。除非在代码中对其进行修改,否则它的可视化表示形式将与它从中继承的类(即   Button)的表示形式完全相同。     
    
  将属性添加到继承的控件中   
  继承的   Windows   窗体控件的可能用途之一是创建与标准   Windows   窗体控件的外观相同、但公开自定义属性的控件。在本节中,您将向控件中添加名为   ButtonValue   的属性。   
    
  添加   Value   属性     
    
  在解决方案资源管理器中,右击“ValueButton.cs”,然后在快捷菜单中单击“查看代码”。     
  找到   class   语句。在紧靠   {   的后面键入下面的代码:     
  //   Creates   the   private   variable   that   will   store   the   value   of   your     
  //   property.   
  private   int   varValue;   
  //   Declares   the   property.   
  public   int   ButtonValue   
  {   
        //   Sets   the   method   for   retrieving   the   value   of   your   property.   
        get   
        {   
              return   varValue;   
        }   
        //   Sets   the   method   for   setting   the   value   of   your   property.   
        set   
        {   
              varValue   =   value;   
        }   
  }   
  此代码设置存储和检索   ButtonValue   属性的方法。get   语句设置返回到存储在私有变量   varValue   中的值的值,set   语句通过使用   value   关键字设置私有变量的值。     
    
  从“文件”菜单中,选择“全部保存”来保存项目。     
  测试控件   
  控件不是独立的项目,它们必须寄宿在容器中。若要测试控件,必须提供一个运行该控件的测试项目。还必须通过生成(编译)该控件使其可由测试项目访问。在本节中,您将生成控件,并在   Windows   窗体中对其进行测试。   
    
  生成控件     
    
  在“生成”菜单上单击“生成”。     
  生成应成功,不存在任何编译器错误或警告。     
    
  创建测试项目     
    
  在“文件”菜单上,指向“添加项目”,然后单击“新建项目”以打开“添加新项目”对话框。     
  选择“Visual   C#   项目”节点,然后单击“Windows   应用程序”。     
  在“名称”框中键入   Test。     
  在解决方案资源管理器中,右击测试项目的“引用”节点,然后从快捷菜单中选择“添加引用”以显示“添加引用”对话框。     
  单击标记为“项目”的选项卡。     
  双击   ValueButtonLib   项目,并注意该项目此时出现在“选定的组件”窗格中。     
  添加引用后,应将新控件添加到工具箱。如果您的控件已经出现在工具箱中,则应该跳过下一节。     
    
  将控件添加到工具箱     
    
  右击工具箱,然后从快捷菜单中选择“自定义工具箱”。     
  “自定义工具箱”对话框打开。     
    
  选择“.NET   框架组件”选项卡并单击“浏览”。浏览到   ValueButtonLib\bin\debug   文件夹并选择   ValueButton.dll。     
  ValueButton   出现在“自定义工具箱”对话框的组件列表中。     
    
  在“自定义工具箱”对话框中,单击   ValueButton   旁的框并关闭窗口。     
  ValueButton   被添加到选定的工具箱的选项卡上。     
    
  将控件添加到窗体     
    
  在解决方案资源管理器中,右击“Form1.cs”,然后从快捷菜单中选择“视图设计器”。     
  在工具箱中,向下滚动直到到达标记为   ValueButton   的图标。双击该图标。     
  窗体上显示一个“ValueButton”。     
    
  右击“ValueButton”并从快捷菜单中选择“属性”。     
  在“属性”窗口中检查该控件的属性。注意,它们与标准按钮公开的属性相同,不同的是有一个附加属性   ButtonValue。     
  将   ButtonValue   属性设置为   5。     
  在“工具箱”的“Windows   窗体”选项卡中,双击“标签”将   Label   控件添加到窗体中。     
  将标签重新定位到窗体中心。     
  双击   valueButton1。     
  代码编辑器打开并显示   ValueButton1_Click   事件。     
    
  键入以下代码行。     
  label1.Text   =   valueButton1.ButtonValue.ToString();   
  在解决方案资源管理器中,右击“测试”,然后从快捷菜单中选择“设为启动项目”。     
  从“调试”菜单中选择“启动”。     
  出现   Form1。     
    
  单击   valueButton1。     
  Label1   中显示数字“5”,说明继承控件的   ButtonValue   属性已经通过   ValueButton1_Click   方法传递到   Label1。这样,ValueButton   控件便继承了标准   Windows   窗体按钮的所有功能,但是公开了一个附加的自定义属性。   
    
  啊~~~~~~~~   搞定