动画形式在VB.NET中调整大小

时间:2009-08-06 13:14:59

标签: vb.net forms resize setbounds

我的表格位于桌面窗口右下角的任务栏/系统托盘上方。这有点像弹出通知。通知本身看起来很棒,但是它上面有一个按钮可以调整表格的大小,以5px的增量设置大小,同时保持相对于屏幕右下角的位置。

这个问题是看起来不太顺利。调整 Me.Width 从左侧调整大小,然后您必须使用 Me.Left 向左移动表单以进行补偿。 Me.SetBounds似乎只是设置这些属性的包装器。

我能做些什么让表格顺利(或至少看起来)从表格的左边向外调整大小?

3 个答案:

答案 0 :(得分:4)

ETA :您实际上可以使用SetBounds执行此操作,因为SetBounds会委托给SetBoundsCoreSetWindowPos会调用SetBounds。所以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 将在内部真正设置所有边界,窗口管理器将在设置所有属性后仅重新绘制窗口


另一种选择是导入MoveWindow function并使用它。它在这里产生一个平滑的动画,因为它可以在告诉窗口管理器重绘窗口之前同时设置的大小和位置。

我的测试代码看起来像这样(在Reflector的帮助下从C#通过IL转换为VB):

{{1}}

答案 1 :(得分:0)

我从未尝试过这个,但你尝试过将表单的DoubleBuffer属性设置为True吗?这应该使绘图平滑。

答案 2 :(得分:0)

您可能会尝试将像素步长减少到1-2也是如此,5px调整大小似乎很多,我可以看到这可能会出现波动。