Animieren Form der Größe in VB.NET
Frage
Ich habe eine Form leicht über der Taskleiste / Taskleiste in der rechten unteren Ecke von meinem Desktop-Fenster positioniert. Es ist eine Art wie eine Pop-up-Benachrichtigung. Die Meldung selbst sieht gut aus, aber es gibt einen Knopf auf mich, die die Form nach oben ändert die Größe, die Dimensionierung in Schritten von 5px Animieren unter Beibehaltung seiner Position relativ zu der unteren rechten Ecke des Bildschirms.
Das Problem dabei ist, dass es nicht sehr glatt aussieht. Einstellen Me.Width von links ändert die Größe, so dass Sie müssen dann das Formular nach links bewegen mit Me.Left zu kompensieren. Me.SetBounds scheint nur ein Wrapper zu sein für diese Eigenschaften ohnehin einstellen.
Gibt es etwas, was ich tun kann, das Formular haben glatt (oder zumindest scheint) die Größe nach außen von der linken Seite der Form?
Lösung
ETA: Sie können diese mit SetBounds
tatsächlich tun, als SetBounds
wird delegieren SetBoundsCore
was wiederum SetWindowPos
aufrufen wird. So SetBounds
wird intern wirklich alle Grenzen gesetzt auf einmal und der Fenstermanager wird das Fenster neu zu zeichnen nur nach alle Eigenschaften festgelegt sind.
Eine andere Möglichkeit wäre die MoveWindow
Funktion zu importieren und verwenden, die statt. Es erzeugt eine glatte Animation hier, wie es Größe und Position gleichzeitig einstellen kann, bevor sagen, den Window-Manager das Fenster neu zu zeichnen.
Mein Testcode sah dies wie (von C # über IL konvertiert mit Hilfe von 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
Andere Tipps
Ich habe nie versucht, diese, aber haben Sie versucht, die Double Eigenschaft des Formulars auf True setzen? Dies sollte die Zeichnung glätten.
Sie könnten versuchen, die Pixelschritte reduziert es auch auf 1-2 Down- erhöht wird, scheint 5px wie viel Größe werden eingestellt, konnte ich sehen, wie diese abgehackt erscheinen könnte.