Willkommen bei Graphic WinForms Clock Charts, einer Open-Source-Code-Bibliothek.
Der Hauptzweck dieses Projekts besteht darin, grafische „uhrähnliche“ Objekte für C#- und VB.NET-Winforms-Entwickler bereitzustellen. Die Bibliothek ist in erster Linie für Anwendungen gedacht, die berechnete Daten zur Leistung präsentieren (z. B. das Vertriebs-Dashboard eines Unternehmens).
Jedes Uhrenobjekt verfügt über eine Vielzahl von Eigenschaften, die zur Anpassung verwendet werden. Uhren können beim Aktualisieren oder Laden eine Animation enthalten.
Laden Sie die neueste Version von BusinessClocks.dll auf Ihren lokalen Computer herunter.
Die letzte Version finden Sie immer im Master-Zweig des Repositorys.
Laden Sie die DLL mit Visual Studio in Ihr Winforms-Projekt.
Anweisungen zum Laden der DLL in Ihr Projekt:
Using
-Anweisung (C#) oder Imports
-Anweisung (VB.NET) zum Namespace BusinessClocks.ExecutiveClocks
oben in der Form1
Datei hinzu.Form1
Klasse ein.C#-Testbeispiel
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-Testbeispiel
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
Hinweis: Alle Uhren (vorerst WaitClock und CarClock) erben GoalsClock
Eigenschaften:
Clock:
Instanz des Grafikobjekts, das die Uhr darstellt und nach dem Aufruf von Create()
initialisiert wurde.ClockWidth
: Ruft die Taktbreite ab oder legt sie fest.ClockHeight
: Ruft die Uhrhöhe ab oder legt sie fest.xPos
und Ypos
: Ruft die x- oder y-Position des Rechtecks ab, das die Uhr enthält.ClockBackGroundColor
: Ruft die Hintergrundfarbe der Uhr ab oder legt sie fest.FontColor
: Ruft die Schriftfarbe des Texts ab, der den PercentOfGoals
-Prozentsatz beschreibt, oder legt diese fest.ClockFont
: Ruft die Schriftart des Texts ab, der den PercentOfGoals-Prozentsatz beschreibt, oder legt diese fest. Bitte beachten Sie:font
nicht zu ändern, da der Getter dieser Eigenschaft LoadFont()
Funktion aufruft, um mithilfe des internen Elgoritem die geeignete Schriftgröße und den geeigneten Schriftstil relativ zur Uhrgröße zu berechnen.LoadFont()
aufrufen, um die Schriftart zurückzusetzen.InnerCircleColor
: Ruft die Farbe des inneren Bogens ab oder legt diese fest.InnerCircleWeight
: Ruft das Pixelgewicht (Breite) des inneren Bogens ab oder legt es fest.OuterCircleColor
: Ruft die Farbe des äußeren Bogens ab oder legt diese fest.OuterCircleWeight
: Ruft das Pixelgewicht (Breite) des äußeren Bogens ab oder legt es fest.PercentOfGoals
: Ruft den Uhrwert ab oder legt ihn fest. zum Beispiel Wert von 0,1F = 10 %, Wert von 0,5F = 50 %, Wert von 1,1F = 110 % usw.GoalsPercentDecimalValue
: Ruft den Dezimalwert der Uhr ab.Animate
(Feld): Ruft einen Wert ab oder legt ihn fest, der angibt, ob die Animation aktiviert wird oder nicht.AnimationLength
: Ruft die Animationsgeschwindigkeit (Milisec) basierend auf der AnimationLength-Enumeration ab oder legt sie fest: SuperFast = 1, Fast = 4, ModerateFast = 8, Moderate = 15, ModerateSlow = 28, Slow = 50, SuperSlow = 80.TimerInterval
: Ruft das Tick-Intervall für den internen Timer ab oder legt es fest. Der empfohlene Wert ist 4 (Standard). Um die Aktualisierungszeit zu verkürzen, verwenden Sie einen niedrigeren Wert.Methoden:
Create(ByVal AnimateClock As Boolean)
: Initialisierung des Uhrenobjekts, muss aufgerufen werden, nachdem alle Eigenschaften festgelegt wurden (Entwickler beachten bitte: Diese Methode ist überschreibbar/virtuell).RefreshClock(ByVal AnimateClock As Boolean)
: Aktualisiert und zeichnet die Grafiken des Uhrobjekts neu. Rufen Sie diese Methode auf, nachdem Sie Eigenschaften geändert haben (z. B. PercentOfGoals, InnerCircleColor). Die meisten Uhreneigenschaften rufen diese Methode auf, wenn ihr Wert geändert wird. (Entwickler beachten bitte: Diese Methode ist überschreibbar/virtuell).LoadFont()
: Gibt mithilfe des internen Elgoritem die passende Schriftgröße und den passenden Schriftstil im Verhältnis zur Taktgröße zurück.LoadFont()
aufrufen, um die Schriftart zurückzusetzen.Dispose()
: Die Methode wird von der IDisposable-Schnittstelle (in der mscorlib.dll-Assembly) implementiert. Beim Aufruf wird das Uhrobjekt entsorgt und alle GDI-Objekte werden aus dem Speicher freigegeben.Eigenschaften:
ClockPanel
(Feld): Wird zur Aufnahme in das Clock
-Objekt verwendet, wenn eine Textleiste erforderlich ist. Wichtig: Wenn BaseBar = True
wird das Clock
Objekt in ClockPanel
gehostet, um eine Leiste mit Leistungstext unter der Uhr anzuzeigen.BaseBar = True
verwenden Sie dieses Steuerelement (und nicht die Clock-Eigenschaft), um die Uhr mit der Textleiste abzurufen.BaseBar = False
diese Eigenschaft niemals verwendet, ist das Ergebnis NullReferenceException
, da sie nicht initialisiert wird (Bitte lesen Sie Issue6, das vom Benutzer lordofscripts geöffnet wurde: #6). LowPerformance
: Ruft die Anzeige für niedrige Leistung ab oder legt diese fest. Diese Eigenschaft ist an die Eigenschaft „LowPerFormanceColor“ gebunden und ihr Wert legt den grafischen Bereich der Uhr mit niedriger Leistung mit der Farbe „LowPerFormanceColor“ fest.
MediumPerformance
: Ruft die Anzeige für die mittlere Leistung ab oder legt sie fest. Diese Eigenschaft ist an die Eigenschaft „MediumPerFormanceColor“ gebunden und ihr Wert legt den grafischen Bereich der Uhr für mittlere Leistung mit der Farbe „MediumPerFormanceColor“ fest.
HighPerformance
: Ruft die Anzeige für hohe Leistung ab oder legt sie fest. Diese Eigenschaft ist an die Eigenschaft „HighPerFormanceColor“ gebunden und ihr Wert legt den grafischen Bereich der Hochleistungsuhr mit der Farbe „HighPerFormanceColor“ fest.
HighPerFormanceColor
: Ruft den grafischen Hochleistungsbereich in der Uhr mit der ausgewählten Farbe ab oder legt diesen fest (gebunden an HighPerFormance
Eigenschaft).
MediumPerFormanceColor
: Ruft den grafischen Mediumleistungsbereich in der Uhr mit der ausgewählten Farbe ab oder legt diesen fest (gebunden an MediumPerformance
Eigenschaft).
LowPerFormanceColor
: Ruft den grafischen Bereich mit geringer Leistung in der Uhr mit der ausgewählten Farbe ab oder legt diesen fest (gebunden an LowPerformance
Eigenschaft).
NeedleBaseColor
: Ruft die Hintergrundfarbe der Nadelbasis (Uhrzeiger) ab oder legt diese fest.
NeedleBaseWeight
: Ruft das Pixelgewicht (Dicke) der Nadelbasis (Uhrzeiger) ab oder legt es fest.
NeedleOuterColor
: Ruft die Hintergrundfarbe des äußeren Nadelbereichs (Uhrzeiger) ab oder legt diese fest.
NeedleOuterWeight
: Ruft das Pixelgewicht (Dicke) des äußeren Nadelbereichs (Uhrzeiger) ab oder legt es fest.
NeedleInnerColor
: Ruft die Hintergrundfarbe des inneren Nadelbereichs (Uhrzeiger) ab oder legt diese fest.
NeedleInnerWeight
: Ruft das Pixelgewicht (Dicke) des inneren Nadelbereichs (Uhrzeiger) ab oder legt es fest.
ShowInnerCutForPerformance
: Ruft einen Wert ab oder legt diesen fest, der angibt, ob ein visueller innerer Schnitt (Schrägstrich), der die Leistung darstellt, in der Mitte des Uhrrahmens gezeichnet wird.
InnerCutPreformanceColor
: Ruft die Farbe des visuellen inneren Schnitts (Schrägstrich) ab, der die Leistung in der Mitte des Taktrahmens darstellt, oder legt diese fest.
InnerCutPerformanceWeight
: Ruft das Gewicht (Dicke) des inneren Schnitts (Schrägstrich) ab, der die Leistung in der Mitte des Taktrahmens darstellt, oder legt dieses fest.
BarFont
: Ruft die Schriftart des Texts ab, der den PercentOfGoals-Prozentsatz beschreibt, oder legt diese fest.
BarBackColor
: Ruft die Hintergrundfarbe der Leistungsleiste ab oder legt diese fest.
BarForeColor
: Ruft die Schriftfarbe der Leistungsleiste ab oder legt diese fest.
BarValueDigitsForeColor
: Ruft die Schriftfarbe der Beschriftungen max(100 %) und min(0 %) des Balkens ab oder legt diese fest.
BarValueDigitsBackColor
: Ruft die Hintergrundfarbe der Markierungen max(100 %) und min(0 %) des Balkens ab oder legt diese fest.
BarValueDigitsFont
: Ruft die Schriftart der Beschriftungen max(100 %) und min(0 %) des Balkens ab oder legt diese fest.
Eigenschaften:
waitText
: Ruft den Text in der Mitte der Uhr ab oder legt ihn fest. Methoden:
SetArrayColors(ByVal arrayOfColors() As Color)
: Legt eine Reihe von Farben fest, die sich nach jeder 360-Grad-Drehung ändern. Die DLL ist in VB.NET geschrieben.
Sie können es auch mit C#-Projekten verwenden.
Zwei identische Beispiele werden hinzugefügt, für C# und für VB.NET.
Dies ist ein Open-Source-Projekt: Quellcode
Wir verwenden SemVer zur Versionierung.
Die GoalsClock-Basisklasse verfügt über ein Version
: Verwenden Sie es, um die Versionsnummer der Bibliothek zu überprüfen.
Dieser Abschnitt befindet sich noch in kurzer Zeit im Aufbau
Hier finden Sie Erklärungen und Beispiele für Entwickler, die sich am Projekt beteiligen und eigene Clock-Charts schreiben möchten.
WaitClock
-Objekt angezeigt, während die Anwendung eine lange Aufgabe im Hintergrund mithilfe von Threads ausführtC#-Codebeispiel mit Kommentaren:
/*
**************************************************************************
* 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-Codebeispiel mit Kommentaren:
' **************************************************************************
' * 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