动画形式调整在VB.NET
题
我在我的桌面窗口的右下角任务栏/系统托盘略高于定位的形式。这有点像一个弹出通知。通知本身看起来不错,但有上有一个按钮,调整大小的形式了,在动画中为5px增量的大小,同时保持它相对于屏幕的右下角位置。
这里的问题是,它看起来并不很顺利。调整的 Me.Width 的从左边调整大小,所以你要那么表单移动到左侧用的 Me.Left 的补偿。 Me.SetBounds只是似乎是一个包装反正设定这些属性。
有什么我可以做具有以下形式平滑地(或至少出现)从表单的左侧向外调整大小?
解决方案
ETA::您可以真正做到这一点使用SetBounds
,作为SetBounds
将委托给SetBoundsCore
,这反过来将调用SetWindowPos
。所以SetBounds
将在内部真正建立的所有界限,在一次和窗口管理器将重绘窗口唯一的之后的所有属性都设置。
另一种办法是导入 MoveWindow
功能并使用它。在这里产生一个平滑的动画,因为它可以设置尺寸和位置同时前告知窗口管理程序重新绘制窗口。
我测试代码看起来像这样(通过IL从C#转换与从反射器帮助到VB):
Private button1 As Button
Private components As IContainer = Nothing
Private tm As Timer = New Timer
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
MyBase.Left = (Screen.PrimaryScreen.WorkingArea.Width - MyBase.Width)
MyBase.Top = (Screen.PrimaryScreen.WorkingArea.Height - MyBase.Height)
Me.tm.Enabled = False
Me.tm.Interval = 20
AddHandler Me.tm.Tick, Function
If (MyBase.Width < 500) Then
Form1.MoveWindow(MyBase.Handle, (MyBase.Left - 5), (MyBase.Top - 5), (MyBase.Width + 5), (MyBase.Height + 5), True)
Else
Me.tm.Enabled = False
End If
End Function
End Sub
<DllImport("user32.dll", SetLastError:=True)> _
Friend Shared Function MoveWindow(ByVal hWnd As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Boolean) As Boolean
End Function
其他提示
我从来没有尝试过这一点,但你试过形式的双缓冲属性设置为True?这应该平滑图。
您可以尝试减少它的增量下降到1-2以及像素的步骤,为5px好像很多被调整大小,我可以看到这是如何出现波动。
不隶属于 StackOverflow