ยินดีต้อนรับสู่แผนภูมินาฬิกา Winforms แบบกราฟิก ซึ่งเป็นไลบรารีโค้ดโอเพ่นซอร์ส
วัตถุประสงค์หลักของโครงการนี้คือการจัดหาออบเจ็กต์กราฟิก "เหมือนนาฬิกา" สำหรับนักพัฒนา C# และ VB.NET Winforms libary ได้รับการออกแบบมาเพื่อแอปพลิเคชันที่นำเสนอข้อมูลที่คำนวณเกี่ยวกับประสิทธิภาพเป็นหลัก (เช่น แดชบอร์ดการขายของบริษัท)
ออบเจ็กต์นาฬิกาแต่ละอันมีคุณสมบัติที่หลากหลาย ซึ่งใช้สำหรับการปรับแต่ง นาฬิกาสามารถรวมภาพเคลื่อนไหวได้เมื่อรีเฟรชหรือโหลด
ดาวน์โหลด BusinessClocks.dll เวอร์ชันล่าสุดลงในคอมพิวเตอร์ของคุณ
คุณสามารถค้นหาเวอร์ชันล่าสุดได้ในสาขาหลักของพื้นที่เก็บข้อมูล
โหลด .dll ไปยังโปรเจ็กต์ winforms ของคุณโดยใช้ Visual Studio
คำแนะนำในการโหลด dll ในโครงการของคุณ:
Using
(C#) หรือ Imports
(VB.NET) ไปยังเนมสเปซ BusinessClocks.ExecutiveClocks
ที่ด้านบนของไฟล์ Form1
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()
เพื่อคำนวณขนาดและสไตล์แบบอักษรที่เหมาะสมโดยสัมพันธ์กับขนาดนาฬิกาโดยใช้อัลกอริทึมภายใน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 = 80TimerInterval
: รับหรือตั้งค่าช่วงเวลาเห็บสำหรับตัวจับเวลาภายใน ค่าที่แนะนำคือ 4 (ค่าเริ่มต้น) เพื่อเร่งเวลารีเฟรชให้ใช้ค่าที่ต่ำกว่าวิธีการ:
Create(ByVal AnimateClock As Boolean)
: การเริ่มต้นวัตถุนาฬิกาจะต้องถูกเรียกหลังจากตั้งค่าคุณสมบัติทั้งหมดแล้ว (โปรดทราบนักพัฒนา: วิธีนี้สามารถเอาชนะได้ / เสมือน)RefreshClock(ByVal AnimateClock As Boolean)
: รีเฟรชและวาดกราฟิกของออบเจ็กต์นาฬิกาใหม่ เรียกใช้เมธอดนี้หลังจากที่คุณเปลี่ยนคุณสมบัติ (เช่น PercentOfGoals, InnerCircleColor เป็นต้น) คุณสมบัตินาฬิกาส่วนใหญ่จะเรียกใช้เมธอดนี้เมื่อค่ามีการเปลี่ยนแปลง (นักพัฒนาโปรดทราบ: วิธีนี้สามารถเอาชนะได้ / เสมือน)LoadFont()
: ส่งคืนขนาดและรูปแบบแบบอักษรที่เหมาะสมโดยสัมพันธ์กับขนาดนาฬิกาโดยใช้อัลกอริทึมภายในLoadFont()
เพื่อรีเซ็ตแบบอักษรได้ตลอดเวลาDispose()
: วิธีการนี้ใช้จากอินเทอร์เฟซ IDisposable (ในชุดประกอบ mscorlib.dll) เมื่อเรียกว่าวัตถุนาฬิกาจะถูกกำจัดและวัตถุ GDI ทั้งหมดจะถูกปลดปล่อยจากหน่วยความจำคุณสมบัติ:
ClockPanel
(ฟิลด์): ใช้เพื่อบรรจุวัตถุ Clock
หากจำเป็นต้องใช้แถบข้อความ สิ่งสำคัญ: เมื่อ BaseBar = True
วัตถุ Clock
จะถูกโฮสต์ภายใน ClockPanel
เพื่อแสดงแถบข้อความประสิทธิภาพใต้นาฬิกาBaseBar = True
ให้ใช้การควบคุมนี้ (ไม่ใช่คุณสมบัติ Clock) เพื่อรับนาฬิกาด้วยแถบข้อความBaseBar = False
ไม่เคยใช้คุณสมบัตินี้ ผลลัพธ์จะเป็น NullReferenceException
เนื่องจากจะไม่ถูกเตรียมใช้งาน (โปรดอ่านปัญหาที่ 6 ที่ถูกตรงข้ามโดยผู้ใช้ lordofscripts: #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
: รับหรือตั้งค่าสีแบบอักษรของป้ายกำกับสูงสุด (100%) และต่ำสุด (0%) ของแถบ
BarValueDigitsBackColor
: รับหรือตั้งค่าสีพื้นหลังของป้ายกำกับสูงสุด (100%) และต่ำสุด (0%) ของแถบ
BarValueDigitsFont
: รับหรือตั้งค่าแบบอักษรของป้ายกำกับสูงสุด (100%) และต่ำสุด (0%) ของแถบ
คุณสมบัติ:
waitText
: รับหรือตั้งค่าข้อความตรงกลางนาฬิกา วิธีการ:
SetArrayColors(ByVal arrayOfColors() As Color)
: ตั้งค่าชุดสีที่จะเปลี่ยนแปลงหลังจากการหมุน 360 องศาแต่ละครั้ง .dll ถูกเขียนด้วย VB.NET
คุณยังสามารถใช้กับโปรเจ็กต์ C# ได้อีกด้วย
มีการเพิ่มตัวอย่างที่เหมือนกันสองตัวอย่างสำหรับ C# และ VB.NET
นี่คือโครงการโอเพ่นซอร์ส: ซอร์สโค้ด
เราใช้ SemVer สำหรับการกำหนดเวอร์ชัน
คลาสพื้นฐานของ GoalsClock มีฟิลด์ค่าคงที่ Version
: ใช้เพื่อตรวจสอบหมายเลขเวอร์ชันของ libary
ส่วนนี้ยังอยู่ระหว่างการก่อสร้างในระยะเวลาอันสั้น
คุณจะพบคำอธิบายและตัวอย่างสำหรับนักพัฒนาที่ต้องการมีส่วนร่วมในโครงการและเขียนแผนภูมินาฬิกาของตนเองได้ที่นี่
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