ETA:実際には を使用してこれを行うことがSetBounds
できます。そのため、実際にはすべての境界が一度に内部的に設定され、ウィンドウ マネージャーはすべてのプロパティが設定された後にのみウィンドウを再描画します。SetBounds
SetBoundsCore
SetWindowPos
SetBounds
MoveWindow
別のオプションは、関数をインポートして代わりに使用することです。ウィンドウマネージャーにウィンドウの再描画を指示する前に、サイズと位置を同時に設定できるため、ここではスムーズなアニメーションが生成されます。
テスト コードは次のようになります (C# から IL 経由で Reflector を使用して 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