歡迎使用圖形 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