简单控件集合






4.97/5 (28投票s)
一个包含简单 .NET Framework/.NET WinForm 控件和实用工具的集合。
- 下载 SimpleWidgets2_210_Source - 473.9 KB
- 下载 SimpleWidgets2_210_Library - 4.3 MB
- 下载 SimpleWidgets2_210_Demo - 122.9 KB
引言
这是该库的 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
库中有许多类。主要的类是 Filler
、Filler2
、Line
和 Polygon
。它们都提供完整的 Visual Studio 设计器支持(针对 .NET Framework 项目)。
Filler
Filler
类是一个区域填充类。它支持以下填充类型:
- 空填充,
- 纯色填充(使用单一颜色),
- 阴影线填充(使用阴影线颜色、阴影线图案和背景色),
- 线性渐变填充(使用任意数量的颜色),以及
- 路径渐变填充。
线性渐变填充有一个由角度值指定方向。路径渐变填充从一个中心点向外辐射,可以是矩形或椭圆形。例如,这是一个角度为 57 度的渐变:
![]() |
在控件中包含一个公共类型的 Filler
,它将自动被 Visual Studio 设计器支持。以下代码段显示了一个名为 AreaFill
的 Filler
类型成员:
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 | 一个使用选项卡组合了 WebColorPicker 、SystemColorPicker 和 CustomColorPicker 的控件。 |
ComboColorPickerDialog | 一个带有 ComboColorPicker 控件的对话框窗体。 |
ColorGradientEditor | 一个用于编辑颜色渐变的控件。 |
ColorGradientEditorDialog | 一个带有 ColorGradientEditor 控件的对话框窗体。 |
DashStyleComboBox | 一个用于从 ComboBox 控件中选择预设 DashStyle 值的控件。 |
HatchStyleComboBox | 一个用于从 ComboBox 控件中选择预设 HatchStyle 值的控件。 |
LinearGradientModeComboBox | 一个用于从 ComboBox 控件中选择预设 LinearGradientMode 值的控件。 |
HSColor | 一个辅助类,包含用于生成 HSL 或 HSV 色环的方法,以及在 RGB、HSL 和 HSV 颜色空间之间转换的方法。 |
Resizer | 一个辅助类,用于控制容器(通常是 Form 或 Panel )中的控件在容器调整大小时如何改变位置和大小。 |
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 关键字。 - 修复了一些小的文档错误。
- 为布尔值、Size 和 Point 添加了
- 2022 年 12 月 4 日 - 2.0.0 版本
- 添加了
Resizer
类。 - 为
Filler
、Filler2
、Line
和Polygon
类添加了 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
将窗体左上角定位到指定点,而不是文档中所述的上边缘中心的错误。 - 更新了
SetStartPosition
和SetStartPositionBelowControl
,以便调整窗体位置,使其保持在屏幕的工作区域内。 - 修复了网页颜色列表中缺少“黑色”的错误。
- 修复了
- 2015 年 9 月 13 日 - 1.1.0 版本
- 修复了
FillerPanel
和Filler2Panel
使用嵌套UserControl
,导致无法截获鼠标消息的错误。 - 修复了
Utils.SetSetPosition()
在多显示器系统的非主显示器上有时无法正常工作的错误。 - 为
FillerEditorDialog
和Filler2EditorDialog
添加了额外的构造函数,允许将窗口直接定位在指定控件的下方。 - 将各种对话框的窗体边框样式从固定对话框更改为固定工具窗口。
- 更改了各种对话框的标题。
- 更改了
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 日 - 首次发布