65.9K
CodeProject 正在变化。 阅读更多。
Home

简单控件集合

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (28投票s)

2014 年 2 月 2 日

CPOL

9分钟阅读

viewsIcon

56963

downloadIcon

3454

一个包含简单 .NET Framework/.NET WinForm 控件和实用工具的集合。

引言

这是该库的 2.1.0 版本。它为 SimpleCodeBuilder 类添加了方法并修复了其中的错误。请注意,新版本(2.x)与旧版本(1.x)的库之间存在不兼容性。更多详情请参阅“历史记录”部分。

SimpleWidgets2 库是一个简单的 .NET Framework/.NET Windows Forms 控件和实用工具的集合。它们主要用于更复杂的控件和微件。

SimpleWidgets2 库使用 .NET Framework 3.5、.NET Framework 4.6.2 和 .NET 6.0 进行编译。

所有公共和受保护的类、方法和属性都使用标准的 C# XML 文档注释进行了完整记录。该项目包含 .chm 和 .mshc 两种格式的帮助文件。有关使用该库的更多详细信息,请参阅帮助文件中的“概述”部分。

SimpleWidgets2_210_Demo 下载包含以下文件:

  GAW.SimpleWidgets2.Net462.dll   为 .NET Framework 4.6.2 编译的库。
  GAW.SimpleWidgets2.ExplorerApp.Net462.exe   演示库中大部分类的示例应用程序。
  GAW.SimpleWidgets2.ColorCircleDemoApp.Net462.exe   用于生成色环的示例应用程序,演示了 HSColor.GenerateCircle() 方法。
  GAW.SimpleWidgets2.ResizerDemoApp.exe   演示 Resizer 类用法的示例应用程序。

SimpleWidgets2_210_Library 下载包含:

  GAW.SimpleWidgets2.Net35.dll   为 .NET Framework 3.5 编译的库。
  GAW.SimpleWidgets2.Net462.dll   为 .NET Framework 4.6.2 编译的库。
  GAW.SimpleWidgets2.Net60 (.dll,.deps.json)   为 .NET 6.0 编译的库。
  GAW.SimpleWidgets2.ExplorerApp.Net35.exe   演示库中大部分类的示例应用程序,为 .NET Framework 3.5 编译。
  GAW.SimpleWidgets2.ExplorerApp.Net462.exe   演示库中大部分类的示例应用程序,为 .NET Framework 4.6.2 编译。
  GAW.SimpleWidgets2.ExplorerApp.Net60 (.exe,.dll,.deps.json,.runtimeconfig.json)   演示库中大部分类的示例应用程序,为 .NET 6.0 编译。
  GAW_SimpleWidgets2.chm   帮助文件(HTML 帮助格式)。
  GAW_SimpleWidgets2.msha   帮助文件(MS 帮助查看器格式)。
  GAW_SimpleWidgets2.mshc   帮助文件(MS 帮助查看器格式)。

SimpleWidgets2_210_Source 下载包含上述所有程序的源代码,以及单元测试的源代码和构建帮助文件所需的文件。

使用库

SimpleWidgets2 库中有许多类。主要的类是 FillerFiller2LinePolygon。它们都提供完整的 Visual Studio 设计器支持(针对 .NET Framework 项目)。

Filler

Filler 类是一个区域填充类。它支持以下填充类型:

  • 空填充,
  • 纯色填充(使用单一颜色),
  • 阴影线填充(使用阴影线颜色、阴影线图案和背景色),
  • 线性渐变填充(使用任意数量的颜色),以及
  • 路径渐变填充。

线性渐变填充有一个由角度值指定方向。路径渐变填充从一个中心点向外辐射,可以是矩形或椭圆形。例如,这是一个角度为 57 度的渐变:

在控件中包含一个公共类型的 Filler,它将自动被 Visual Studio 设计器支持。以下代码段显示了一个名为 AreaFillFiller 类型成员:

 
private GAW.SimpleWidgets2.Filler areaFill = new GAW.SimpleWidgets2.Filler();
public GAW.SimpleWidgets2.Filler AreaFill
{
    get { return areaFill; }
    set { areaFill = value; }
}

如果这样的代码示例是控件的一部分,并且该控件被添加到一个窗体上,那么这个属性可以在设计器中设置。

选择“...”按钮会弹出 FillerEditorDialog

Filler2

Filler2 类是一个区域填充类,类似于 Filler,但渐变填充的选项较少。它支持以下填充类型:

  • 空填充,
  • 纯色填充(使用单一颜色),
  • 阴影线填充(使用阴影线颜色、阴影线图案和背景色),以及
  • 渐变填充(使用任意数量的颜色)。

Filler2 旨在用于渐变方向(如果选择了渐变填充)依赖于上下文的控件。例如,想象一个带有旋转箭头的控件。如果为箭头选择了渐变填充,并且控件设计者希望渐变总是沿着箭头指向的方向流动,那么应选择 Filler2 而不是 Filler。如果控件会忽略用户选择的渐变方向,那么让用户能够选择渐变方向就没有意义了。

Line

Line 类表示一条任意大小(粗细)、颜色和虚线样式的线。它旨在用于使用 .NET Graphics 类绘制线条和/或路径。

LineEditorDialog 类实现了一个对话框,允许编辑一个 Line 对象:

Polygon

Polygon 类表示一个多边形,可以为空,也可以由任意数量的点组成。它旨在用于使用 .NET Graphics 类绘制路径。

PolygonEditorDialog 类实现了一个对话框,允许创建和编辑一个 Polygon 对象。通过输入每个点的 X 和 Y 坐标来构建多边形。点可以被添加、删除或重新排序:

其他类

下表总结了 SimpleWidgets 库中大部分(但非全部)的其他类。

WebColorPicker 一个用于选择网页颜色的控件。
   
WebColorPickerDialog 一个带有 WebColorPicker 控件的对话框窗体。
   
SystemColorPicker 一个用于选择系统颜色的控件。
   
SystemColorPickerDialog 一个带有 SystemColorPicker 控件的对话框窗体。
   
CustomColorPicker 一个用于从 RGB 或 HSL 颜色空间中选择任意颜色的控件。
   
CustomColorPickerDialog 一个带有 CustomColorPicker 控件的对话框窗体。
   
ComboColorPicker 一个使用选项卡组合了 WebColorPickerSystemColorPickerCustomColorPicker 的控件。
   
ComboColorPickerDialog 一个带有 ComboColorPicker 控件的对话框窗体。
   
ColorGradientEditor 一个用于编辑颜色渐变的控件。
   
ColorGradientEditorDialog 一个带有 ColorGradientEditor 控件的对话框窗体。
   
DashStyleComboBox 一个用于从 ComboBox 控件中选择预设 DashStyle 值的控件。
   
HatchStyleComboBox 一个用于从 ComboBox 控件中选择预设 HatchStyle 值的控件。
   
LinearGradientModeComboBox 一个用于从 ComboBox 控件中选择预设 LinearGradientMode 值的控件。
   
HSColor 一个辅助类,包含用于生成 HSL 或 HSV 色环的方法,以及在 RGB、HSL 和 HSV 颜色空间之间转换的方法。
   
Resizer 一个辅助类,用于控制容器(通常是 FormPanel)中的控件在容器调整大小时如何改变位置和大小。
   
SimpleCodeBuilder 一个辅助类,用于生成初始化源代码,类似于 Visual Studio 设计器生成的代码。

单元测试和代码覆盖率

此版本使用 NUnit 3 添加了单元测试。单元测试的代码覆盖率是使用 Fine Code Coverage 扩展来测量的。

大多数单元测试的添加是为了确认构造函数、getter 和 setter 的行为符合预期。通过这些简单的测试发现了一些错误!内部代码有一定的覆盖率(例如,CatColorPicker.LayoutCalculator 类的覆盖率为 100%)。不幸的是,对实际 GUI 代码——绘制和响应事件——的覆盖率非常低。我仍在寻找一种令人满意的 GUI 代码单元测试方法。

针对 .NET Framework 4.6.2 编译的库的发布版本代码覆盖率为 81.9%。分支覆盖率为 56.8%。代码覆盖率测量对所有版本的库都稳定有效。

在 Visual Studio 中编译和运行单元测试所需的包是:

  • NUnit 3.13.2 或更高版本。
  • NUnit3TestAdapter 4.1.0 或更高版本。

代码覆盖率使用 Fortune Ngwenya 的 Fine Code Coverage 扩展进行测量
(版本 1.1.188)。这是一个非常棒的免费工具,我强烈推荐!

未来的更改

一旦解决了 Visual Studio Windows Forms 设计器对 .NET 应用程序的问题,SimpleWidgets 将会更新。希望这会很快发生……

未来版本将要进行的其他更改包括:

  • 对 GUI 代码(尤其是涉及布局计算的代码)进行更多重构,以便更容易进行单元测试。
  • 增强 PolygonEditorDialog,允许拖动点或点组。
  • 允许调整 GradientEditor 的大小。

历史

  • 2022 年 12 月 30 日 - 2.1.0 版本
    • 为布尔值、Size 和 Point 添加了 SimpleCodeBuilder.Add 方法的重载。
    • 修复了某些 SimpleCodeBuilder.Add 方法重载中的一个错误,该错误可能导致在分配 null 值时前面出现 new 关键字。
    • 修复了一些小的文档错误。
  • 2022 年 12 月 4 日 - 2.0.0 版本
    • 添加了 Resizer 类。
    • FillerFiller2LinePolygon 类添加了 XML 序列化。
    • 添加了 SimpleCodeBuilder 类。
    • LinearGradientPanel 类添加了 Redraw 方法。
    • 添加了单元测试(并修复了几个小错误)。
    • 移除了 LinearGradientBrush2 类;添加了新的 Utils.PaintWithLinearGradientBrush 方法以替代失去的功能。
    • 更改了项目,以便使用 Visual Studio 2022 为 .NET Framework 3.5、.NET Framework 4.5.2 和 .NET 6.0 编译库和应用程序。
    • 更改帮助文件以与 Sandcastle Help File Builder 2021.11.7.0 一起使用。
    • 将库名更改为 SimpleWidgets2,命名空间更改为 GAW.SimpleWidgets2,以避免与早期版本的库发生冲突。
  • 2016 年 1 月 19 日 - 1.1.1 版本
    • 修复了 SetStartPosition 将窗体左上角定位到指定点,而不是文档中所述的上边缘中心的错误。
    • 更新了 SetStartPositionSetStartPositionBelowControl,以便调整窗体位置,使其保持在屏幕的工作区域内。
    • 修复了网页颜色列表中缺少“黑色”的错误。
  • 2015 年 9 月 13 日 - 1.1.0 版本
    • 修复了 FillerPanelFiller2Panel 使用嵌套 UserControl,导致无法截获鼠标消息的错误。
    • 修复了 Utils.SetSetPosition() 在多显示器系统的非主显示器上有时无法正常工作的错误。
    • FillerEditorDialogFiller2EditorDialog 添加了额外的构造函数,允许将窗口直接定位在指定控件的下方。
    • 将各种对话框的窗体边框样式从固定对话框更改为固定工具窗口。
    • 更改了各种对话框的标题。
    • 更改了 Line 类,使宽度为零的线为空(不可见)线。
    • CustomColorPicker 控件添加了 alpha 值选择器。
  • 2014 年 9 月 13 日 - 1.0.2 版本
    • 将 .csproj 文件转换为 Visual Studio 2013 格式。
    • 将帮助文件转换为与 SandCastle Help File Builder 2014.5.31.0 一起使用。
  • 2014 年 2 月 5 日 - 1.0.1 版本
    • 修复了一些缺失的文档标签。
  • 2014 年 2 月 2 日 - 首次发布
© . All rights reserved.