下面是引用 za08280714 于 2011-08-10 19:50 发表的 :
大大谢谢你.照你说得方式.背景已经透明了.可是又出现了ㄧ个问题.我用个简单程式让图移动.移动进行中图片透明正方形的框框也跟这移动.动起来像是ㄧ张图在动.有没有办法修改成只有颜色的红点在移动.周围的环境还是跟背景ㄧ样.看起来很自然
注:档案超过2000K.我把程式跟图片分开
Public Class Form1
Dim m_x, m_y, a_X, a_Y As Integer
.......
这好像是叫做 图片闪动(闪烁),英文称 Graphics flicker
可以去 Google 查一下 double buffer 的应用,听说可以去除图片闪烁的问题
但是我在这边用了一个非常简单的方法,我并不知道原理为何:
方法如下:
将 PictureBox 不显示(Visible=0) ,改在 Form1_Paint() 中加入绘图的部分
并设定 Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
就这样图片不会闪烁了
复制程式
Public Class Form1
Dim g As Graphics = Me.CreateGraphics()
Private Sub timer_move_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_move.Tick
Static ti As Integer
pic_red.Left += 10
Me.Refresh()
ti += 1
If ti >= 10 Then timer_move.Enabled = False
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
pic_red.Visible = False
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.DrawImage(pic_red.Image, pic_red.Left, 0)
End Sub
End Class
可以下载看看范例,注意执行过程中图片是 graphics.DrawImage 画出来的,并不是 PictureBox 的物件: