我在我的桌面窗口的右下角任务栏/系统托盘略高于定位的形式。这有点像一个弹出通知。通知本身看起来不错,但有上有一个按钮,调整大小的形式了,在动画中为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好像很多被调整大小,我可以看到这是如何出现波动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top