推 catchtest:感謝大大,我會去試試看的^^ 06/30 13:04
※ 引述《catchtest (蕭雲)》之銘言:
: 1.我想在picturebox或button的Image裡使用動態gif
: 可是圖形卻不會動,我試過用一個計時器每0.1秒refresh一次
: 雖然可以跑,但是感覺很差,請問有其他簡單的方式嗎?
最簡單應該就這個方法了 @.@"
.NET好像沒有可以直接放gif的控制項..
倒是有比較 .NET 的做法..
首先找個地方初始動畫, 例如在 Form_Load 裡..
ImageAnimator.Animate(Button1.Image, AddressOf OnFrameChange)
' 第一個參數是一個 Image, 例如果你的Button1.Image、Picture1.Image等等..
' 第二個參數是一個你自己寫的副程式, 當frame改變時, 也就是換圖了,
' 他就會呼叫這個副程式..
' 這個副程式只是一個最普通的even handler..
Public Sub OnFrameChange( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Button1.Invalidate() ' 這樣會讓button1把自己重繪
End Sub
這樣的做法會比較好, 因為gif並不是每0.1切換一個frame,
把計算何時該切換frame的事交給ImageAnimator,
時間到了就呼叫 OnFrameChange由我們自己重繪.
: 2.我想使用實心的ProgressBar(因為某些需要)
: 像是Office系列的ProgressBar就都是實心的
: CCleaner的ProgressBar也是實心的
: 可是vb.net的ProgressBar卻一定是block
: 我找過所有屬性與網路資料都沒有用
: 請問有好方法嗎?難道要自己做一個ProgressBar?
恐怕沒有@.@"
ProgressBar是有個Style可以設, 設成 Continuous 就是那種實心的樣式..
可是那是適用於沒有開啟 Theme (也就是VisualStyle) 的時候..
(就是 Windows98/95 時代的介面..)
CCleaner是比較早期的程式, 所以沒有打開VisualStyle..
Office系列(好像沒印像有看過ProgressBar)可能是用自訂元件吧..
拜物物件導向之賜, 在VB.NET自己撰寫一個 ProgressBar不會太複雜
新增一個類別檔貼上以下程式, 重新編譯後就會出現在toolbox可以使用了~
這只是一個簡單的雛型, 你可以在 OnPaint 裡撰寫符合你需求的ProgressBar
Public Class MyProgressBar
Inherits ProgressBar ' 繼承 ProgressBar
Public Sub New()
' 設定使用者自己繪出 ProgressBar
SetStyle(ControlStyles.AllPaintingInWmPaint Or _
ControlStyles.UserPaint, True)
End Sub
Protected Overrides Sub OnPaint(ByVal e As _
System.Windows.Forms.PaintEventArgs)
Dim r As Rectangle = ClientRectangle
Dim br As Rectangle = ClientRectangle
r.Width = r.Width * Value / (Maximum - Minimum)
e.Graphics.FillRectangle(SystemBrushes.Highlight, r)
br.Height -= 1
br.Width -= 1
e.Graphics.DrawRectangle(SystemPens.ControlDarkDark, br)
End Sub
End Class
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.138.81
※ 編輯: cole945 來自: 220.139.138.81 (06/30 08:02)