2014-11-14 326 views
4

我试图做一个良好的用户界面的软件,但我不是专业的VB ... 我怎样才能使一个圆形的进度栏?视觉基本圆形进度条

为例

enter image description here

+0

看到http://www.codeproject.com/Articles/30625/Circular-Progress-Indicator和也是http://www.codeproject.com/Articles/14855/SQL-Server-Circular-Progress-Bar – Plutonix

+0

这是用C++构建的,我想用visual basic构建它。 – faresabb2

+0

它们在**中不是**;他们可以很容易地转换为VB。关键是他们(和其他人)已经建成并准备使用;你不必重新创建轮子。 – Plutonix

回答

11

如何只使用GDI +绘制自己。

您可以稍后将其转换为您自己的usercontrol,但这会让您开始。它应该是相当自我解释:

Private Sub Form2_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint 
    DrawProgress(e.Graphics, New Rectangle(5, 5, 60, 60), 40) 
    DrawProgress(e.Graphics, New Rectangle(80, 5, 60, 60), 80) 
    DrawProgress(e.Graphics, New Rectangle(155, 5, 60, 60), 57) 
End Sub 

Private Sub DrawProgress(g As Graphics, rect As Rectangle, percentage As Single) 
    'work out the angles for each arc 
    Dim progressAngle = CSng(360/100 * percentage) 
    Dim remainderAngle = 360 - progressAngle 

    'create pens to use for the arcs 
    Using progressPen As New Pen(Color.LightSeaGreen, 2), remainderPen As New Pen(Color.LightGray, 2) 
     'set the smoothing to high quality for better output 
     g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias 
     'draw the blue and white arcs 
     g.DrawArc(progressPen, rect, -90, progressAngle) 
     g.DrawArc(remainderPen, rect, progressAngle - 90, remainderAngle) 
    End Using 

    'draw the text in the centre by working out how big it is and adjusting the co-ordinates accordingly 
    Using fnt As New Font(Me.Font.FontFamily, 14) 
     Dim text As String = percentage.ToString + "%" 
     Dim textSize = g.MeasureString(text, fnt) 
     Dim textPoint As New Point(CInt(rect.Left + (rect.Width/2) - (textSize.Width/2)), CInt(rect.Top + (rect.Height/2) - (textSize.Height/2))) 
     'now we have all the values draw the text 
     g.DrawString(text, fnt, Brushes.Black, textPoint) 
    End Using 
End Sub 

输出

enter image description here

+0

谢谢......这工作得很好,但如果你知道如何让它比“HighQuality”更高? – faresabb2

+0

老兄,你是高手! –

0

@ faresabb2在在代码的最开始的Form2.Paint子,把

e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality 
+0

谢谢....我会告诉你它是否有效。 – faresabb2

1

这里是一个如何在需要时更新进度循环栏的示例,而不会因刷新而闪烁。

基于马特的代码

只要将代码拷贝到您的形式Paint事件中,适当地改变矩形的大小和位置,以托管在表单中的圈子。 百分比是一个全局变量,当它发生变化时,可以调用me.refresh()方法来触发重绘!

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint 

    Dim g As Graphics = e.Graphics 
    Dim rect As New Rectangle(70, 45, 90, 90) 


    Dim curvatura_progress = CSng(360/100 * percent) 
    Dim curvatura_rimanente = 360 - curvatura_progress 


    Using tratto_progresso As New Pen(Color.Lime, 4), tratto_rimanente As New Pen(Color.White, 4) 

     g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias 

     g.DrawArc(tratto_progresso, rect, -90, curvatura_progress) 
     g.DrawArc(tratto_rimanente, rect, curvatura_progress - 90, curvatura_rimanente) 
    End Using 

      Using fnt As New Font(Me.Font.FontFamily, 14) 

     Dim text As String = percent.ToString + "%" 

        Dim textSize = g.MeasureString(text, fnt) 
     Dim textPoint As New Point(CInt(rect.Left + (rect.Width/2) - (textSize.Width/2)), CInt(rect.Top + (rect.Height/2) - (textSize.Height/2))) 

     g.DrawString(text, fnt, Brushes.Black, textPoint) 

    End Using 

End Sub 
+0

只需添加Dim percent As Single这可能会错过BR1COP –

-1
LabelSec.Text = DateTime.Now.ToString("ss") 
    LabelTime.Text = DateTime.Now.ToString("hh:mm tt") 
    CircularProgressBar1.Value = Convert.ToInt32(LabelSec.Text) 

试试这个家伙...这是使用进度为塞康代码