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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top