作者cole945 (躂躂..)
看板Visual_Basic
标题Re: [.NET] 请教两个小问题
时间Sat Jun 30 07:32:52 2007
※ 引述《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)
1F:推 catchtest:感谢大大,我会去试试看的^^ 06/30 13:04