欢迎使用图形 winforms 时钟图表,这是一个开源代码库。
该项目的主要目的是为 C# 和 VB.NET Winforms 开发人员提供图形“类似时钟”的对象。该库主要是为提供有关绩效的计算数据的应用程序而设计的(例如公司销售仪表板)。
每个时钟对象都有多种属性,用于自定义,时钟可以在刷新或加载时包含动画。
将最新版本的 BusinessClocks.dll 下载到本地计算机。
您始终可以在存储库的 master 分支中找到最新版本。
使用 Visual Studio 将 .dll 加载到 winforms 项目中。
将 dll 加载到项目中的说明:
Using
(C#) 语句或Imports
(VB.NET) 语句添加到Form1
文件顶部的命名空间BusinessClocks.ExecutiveClocks
。Form1
类中。C# 测试示例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessClocks.ExecutiveClocks;
namespace WindowsFormsApplication19
{
public partial class Form1 : Form
{
private BusinessClocks.ExecutiveClocks.CarClock carClock;
private GoalsClock goalsClock;
private WaitClock waitClock;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
carClock = new BusinessClocks.ExecutiveClocks.CarClock(300, 150, 0.8F, true);
carClock.ShowInnerCutForPerformance = false;
carClock.BarBackColor = Color.Pink;
carClock.Create(true);
this.Controls.Add(carClock.ClockPanel);
goalsClock = new GoalsClock(200, 200, 0.8F);
goalsClock.Create(true);
goalsClock.Clock.Location = new Point(0, carClock.ClockPanel.Location.Y + carClock.ClockPanel.Height + 5);
this.Controls.Add(goalsClock.Clock);
waitClock = new WaitClock(150, 150, "Loading...");
waitClock.Clock.Location = new Point(0, goalsClock.Clock.Location.Y + goalsClock.Clock.Height + 5);
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular);
waitClock.SetArrayColors(new Color[] { Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136), Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204) });
waitClock.OuterCircleWeight = 8;
waitClock.InnerCircleWeight = 5;
waitClock.Create(true);
this.Controls.Add(waitClock.Clock);
}
}
}
Visual Basic.NET 测试示例
Imports BusinessClocks.ExecutiveClocks
Public Class Form1
Private carClock As BusinessClocks.ExecutiveClocks.CarClock
Private goalsClock As GoalsClock
Private waitClock As WaitClock
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' car clock (with precentage bar)
carClock = New BusinessClocks.ExecutiveClocks.CarClock(300, 150, 0.8, True)
carClock.ShowInnerCutForPerformance = False
carClock.BarBackColor = Color.Pink
carClock.Create(True)
Me.Controls.Add(carClock.ClockPanel)
' goals clock
goalsClock = New GoalsClock(200, 200, 0.8)
goalsClock.Create(True)
goalsClock.Clock.Location = New Point(0, carClock.ClockPanel.Location.Y + carClock.ClockPanel.Height + 5)
Me.Controls.Add(goalsClock.Clock)
' waitclock
waitClock = New WaitClock(150, 150, "Loading...")
waitClock.Clock.Location = New Point(0, goalsClock.Clock.Location.Y + goalsClock.Clock.Height + 5)
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular)
waitClock.SetArrayColors(New Color() {Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136) _
, Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204)})
waitClock.OuterCircleWeight = 8
waitClock.InnerCircleWeight = 5
waitClock.Create(True)
Me.Controls.Add(waitClock.Clock)
End Sub
End Class
注意:所有时钟(目前为WaitClock和CarClock)都继承GoalsClock
特性:
Clock:
表示时钟的图形对象的实例,在调用Create()
后初始化。ClockWidth
:获取或设置时钟宽度。ClockHeight
:获取或设置时钟高度。xPos
和Ypos
:获取包含时钟的矩形的 x 或 y 位置。ClockBackGroundColor
:获取或设置时钟背景颜色。FontColor
:获取或设置描述PercentOfGoals
百分比的文本的字体颜色。ClockFont
:获取或设置描述 PercentOfGoals 百分比的文本字体。请注意:font
属性,因为该属性的 getter 正在调用LoadFont()
函数,以便使用内部 elgoritem 计算相对于时钟大小的合适字体大小和样式。LoadFont()
来重置字体。InnerCircleColor
:获取或设置内圆弧的颜色。InnerCircleWeight
:获取或设置内弧的像素权重(宽度)。OuterCircleColor
:获取或设置外圆弧的颜色。OuterCircleWeight
:获取或设置外弧的像素权重(宽度)。PercentOfGoals
:获取或设置时钟值。例如 0.1F 的值 = 10%,0.5F 的值 = 50%,1.1F 的值 = 110% 等等...GoalsPercentDecimalValue
:获取时钟十进制值。Animate
(字段):获取或设置一个值,指示是否激活动画。AnimationLength
:根据 AnimationLength 枚举获取或设置动画速度(毫秒):SuperFast = 1、Fast = 4、ModerateFast = 8、Moderate = 15、ModerateSlow = 28、Slow = 50、SuperSlow = 80。TimerInterval
:获取或设置内部计时器的刻度间隔。建议值为 4(默认),以加快刷新时间,使用较低的值。方法:
Create(ByVal AnimateClock As Boolean)
:初始化时钟对象,必须在设置所有属性后调用(开发人员请注意:此方法是 Overridable / Virtual)。RefreshClock(ByVal AnimateClock As Boolean)
:刷新并重绘时钟对象的图形,在更改属性(例如 PercentOfGoals、InnerCircleColor)后调用此方法。大多数时钟属性在其值更改时都会调用此方法。 (开发人员请注意:此方法是可重写/虚拟的)。LoadFont()
:使用内部 elgoritem 返回相对于时钟大小的合适字体 em 大小和样式。LoadFont()
来重置字体。Dispose()
:该方法是从 IDisposable 接口(在 mscorlib.dll 程序集中)实现的,当调用时,时钟对象将被释放,所有 GDI 对象将从内存中释放。特性:
ClockPanel
(字段):如果需要文本栏,则用于包含在Clock
对象内部。重要提示:当BaseBar = True
时, Clock
对象将托管在ClockPanel
内,以便在时钟下方显示性能文本栏。BaseBar = True
使用此控件(而不是 Clock 属性)来获取带有文本栏的时钟。BaseBar = False
从不使用此属性,结果将是NullReferenceException
,因为它不会被初始化(请阅读用户 lordofscripts 打开的问题 6:#6)。 LowPerformance
:获取或设置低性能指示,该属性绑定到LowPerFormanceColor属性,其值将使用LowPerFormanceColor颜色设置低性能时钟的图形区域。
MediumPerformance
:获取或设置中等性能的指示,此属性绑定到MediumPerFormanceColor属性,其值将使用MediumPerFormanceColor颜色设置中等性能时钟的图形区域。
HighPerformance
:获取或设置高性能的指示,该属性绑定到HighPerFormanceColor属性,其值将使用HighPerFormanceColor颜色设置高性能时钟的图形区域。
HighPerFormanceColor
:获取或设置时钟中具有所选颜色的图形高性能区域(绑定到HighPerFormance
属性)。
MediumPerFormanceColor
:获取或设置时钟中具有所选颜色的图形媒体性能区域(绑定到MediumPerformance
属性)。
LowPerFormanceColor
:获取或设置时钟中具有所选颜色的图形低性能区域(绑定到LowPerformance
属性)。
NeedleBaseColor
:获取或设置针(时钟针)底座的背景颜色。
NeedleBaseWeight
:获取或设置针(时钟针)底座的像素权重(厚度)。
NeedleOuterColor
:获取或设置外针(时钟针)区域的背景颜色。
NeedleOuterWeight
:获取或设置外针(时钟针)区域的像素权重(厚度)。
NeedleInnerColor
:获取或设置内针(时钟指针)区域的背景颜色。
NeedleInnerWeight
:获取或设置内针(时钟针)区域的像素权重(厚度)。
ShowInnerCutForPerformance
:获取或设置一个值,该值指示是否在时钟边框的中间绘制表示性能的视觉内切(斜线)。
InnerCutPreformanceColor
:获取或设置代表时钟边框中间性能的视觉内部剪切(斜线)的颜色。
InnerCutPerformanceWeight
:获取或设置代表时钟边界中间性能的内部切割(斜线)的权重(厚度)。
BarFont
:获取或设置描述 PercentOfGoals 百分比的文本的字体。
BarBackColor
:获取或设置性能栏背景颜色。
BarForeColor
:获取或设置性能栏字体颜色。
BarValueDigitsForeColor
:获取或设置条形的 max(100%) 和 min(0%) 标签的字体颜色。
BarValueDigitsBackColor
:获取或设置条形的 max(100%) 和 min(0%) 标签的背景颜色。
BarValueDigitsFont
:获取或设置条形的 max(100%) 和 min(0%) 标签的字体。
特性:
waitText
:获取或设置时钟中间的文本。方法:
SetArrayColors(ByVal arrayOfColors() As Color)
:设置一系列颜色,这些颜色在每 360 度旋转后都会改变。.dll 是用 VB.NET 编写的。
您还可以将它用于 C# 项目。
添加了两个相同的示例,分别用于 C# 和 VB.NET。
这是一个开源项目:源代码
我们使用 SemVer 进行版本控制。
GoalsClock 基类有一个Version
常量字段:用它来检查库的版本号。
该路段还在建设中,短时间内
您可以在这里找到针对想要参与该项目并编写自己的时钟图表的开发人员的解释和示例。
WaitClock
对象带注释的 C# 代码示例:
/*
**************************************************************************
* AUTHOR: Jonathan Applebaum *
* DESCRIPTION: An example that describes how to use WaitClock object *
* from another thread in order to execute a long task in the beckground *
* DATE: 06/01/2017 *
* ************************************************************************
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessClocks.ExecutiveClocks;
namespace WindowsFormsApplication19
{
public partial class Form1 : Form
{
private WaitClock waitClock;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// show wait clock on a different thread until LongTask finish executing
System.Threading.Thread waitThread = new System.Threading.Thread(LoadWaitClock);
waitThread.Start();
// start a new thread to execute LongTask() parallel to the waitThread
System.Threading.Thread longTaskThread = new System.Threading.Thread(LongTask);
longTaskThread.Start();
}
// put the code of your task that you want to execute in the background in that method
private void LongTask()
{
// loop to represent a long task
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1000);
}
// the "long task" inside the method finished to execute - dispose the wait clock from the GUI
panel1.Invoke(new Action(waitClock.Dispose));
// promt to screen
label1.Invoke(new Action(NotifyTaskHasFinished));
}
private void LoadWaitClock()
{
// use action delegate to update GUI changes from another thread
panel1.Invoke(new Action(AddClock));
}
private void AddClock()
{
// configure and initilize the clock
waitClock = new WaitClock(120, 120, "Loading...");
waitClock.ClockBackGroundColor = Color.White;
waitClock.FontColor = Color.Black;
waitClock.Clock.Location = new Point(5, 5);
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular);
waitClock.SetArrayColors(new Color[] { Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136), Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204) });
waitClock.OuterCircleWeight = 8;
waitClock.InnerCircleWeight = 5;
waitClock.Create(true);
this.panel1.Controls.Add(waitClock.Clock);
}
private void NotifyTaskHasFinished()
{
label1.Text = "LongTask() method has finished";
}
}
}
带注释的 Visual Basic.NET 代码示例:
' **************************************************************************
' * AUTHOR: Jonathan Applebaum *
' * DESCRIPTION: An example that describes how To use WaitClock Object *
' * from another thread in order to execute a long task in the beckground *
' * DATE: 06/01/2017 *
' * ************************************************************************
Imports BusinessClocks.ExecutiveClocks
Public Class Form1
Private waitClock As WaitClock
Private Sub Form1_Load_1(sender As Object, e As EventArgs) Handles MyBase.Load
Dim waitThread As System.Threading.Thread = New System.Threading.Thread(AddressOf LoadWaitClock)
waitThread.Start()
Dim longTaskThread As System.Threading.Thread = New System.Threading.Thread(AddressOf LongTask)
longTaskThread.Start()
End Sub
Private Sub LongTask()
For i As Integer = 0 To 9
System.Threading.Thread.Sleep(1000)
Next
Panel1.Invoke(New Action(AddressOf waitClock.Dispose))
Label1.Invoke(New Action(AddressOf NotifyTaskHasFinished))
End Sub
Private Sub LoadWaitClock()
Panel1.Invoke(New Action(AddressOf AddClock))
End Sub
Private Sub AddClock()
waitClock = New WaitClock(120, 120, "Loading...")
waitClock.ClockBackGroundColor = Color.White
waitClock.FontColor = Color.Black
waitClock.Clock.Location = New Point(5, 5)
waitClock.LoadFont("ARIAL", 8, FontStyle.Regular)
waitClock.SetArrayColors(New Color() {Color.FromArgb(0, 100, 100), Color.FromArgb(0, 136, 136), Color.FromArgb(0, 170, 170), Color.FromArgb(0, 204, 204)})
waitClock.OuterCircleWeight = 8
waitClock.InnerCircleWeight = 5
waitClock.Create(True)
Me.Panel1.Controls.Add(waitClock.Clock)
End Sub
Private Sub NotifyTaskHasFinished()
Label1.Text = "LongTask() method has finished"
End Sub
End Class