Frage

Sie kennen alle das „Du hast neue Antworten!“ Benachrichtigungsleiste auf SO. Ich möchte die gleiche Sache in einer Form, vorzugsweise ebenso glatt. Gibt es eine einfache Art und Weise? Oder muss ich vollständig diese selbst erstellen?

Meine Suche brachte keine guten Ergebnisse, nur viele Fortschrittsbalken und Pop-ups im System Infobereich, aber das ist nicht das, was ich suche.

Die Nachrichten, die ich angezeigt werden soll, gehören zu einem Formular, nicht auf die gesamte Anwendung

War es hilfreich?

Lösung

Erstellen Sie zwei Tafeln in der Form, ein Benachrichtigungsfeld nach oben dockte, und unten, dass eine Content-Panel nach oben verankert. In Ihrem Form.Load, stellen Sie die Höhe des Benachrichtigungsfeldes auf Null. Setzen Sie die Höhe nicht auf Null gesetzt in der Entwurfsansicht, werden Sie nicht in der Lage sein, auf dem Benachrichtigungsfeld zu bearbeiten klicken Sie darauf.

Dann, wenn Sie eine Benachrichtigung erhalten, den Inhalt im Benachrichtigungsfenster ziehen und eine System.Windows.Form.Timer dass steigt die Höhe des Benachrichtigungsfeld um einige Pixel alle paar Dutzend Millisekunden oder so erstellen. Stoppen, wenn die Platte aus der gewünschten Höhe ist. Machen Sie dasselbe mit einer negativen Höhe der Platte zu verbergen.

Dies erfordert keine Neulackierung oder Größen oder Positionen von irgendetwas neu zu berechnen, nicht Overdraw nichts, und sieht glatt. Ich habe dies getan und es funktioniert.

Andere Tipps

Sie könnten einfach ein Panel fällt von oben nach unten von dem Client-Bereich des Formulars animieren.

Erhöhen der y des Paneels in einer zeitlich abgestimmten Schleife koordinieren. Das Panel beginnen würde unsichtbar und langsam sichtbar werden. (Das Panel an -panel.height beginnen würde und seine Art und Weise arbeiten, bis auf 0).

Wenn Sie es auf eine bestimmte Form beschränkt wollen, sollte es einfach genug sein, um eine Panel auf dem Formular mit seinem Dock Satz DockStyle.Top zu setzen, dann legen Sie eine Bezeichnung für die Beschreibung und eine Schaltfläche, die versteckt es.

Es ist nicht schwierig, mit einer Platte oder einem Usercontrol zu tun, aber das knifflig Teil macht den Inhalt des Formulars nach unten rutschen, wie die Bar nach unten gleitet. Zur Vereinfachung, dass ich einen Splitcontainer verwenden würde. Die obere splitpanel enthält die Benachrichtigungsleiste und der Spalter Abstand anfänglich 0. Schieben der Stab in der Ansicht durch die Eigenschaft SplitterDistance Inkrementieren. Doing es auf diese Weise bedeutet, Sie müssen sich keine Sorgen machen über die anderen Inhalt des Formulars nach unten rutschen zu machen (was für ein Aufwand ist, weil es Sie von der Verwendung Docking verhindert).

Die einzige Nachteil mit Splitcontainern ich denken kann, ist, dass die Animation der Bar etwas anders sein wird: der Text nicht mit der Stange nach unten scrollen, wird es nach unten an Ort und Stelle, wie die Bar Dias enthüllt werden. Wenn dies stört Sie, können Sie das Problem beheben, indem Sie den Text (oder Ihrem Panel / Custom Control) nach unten schieben, wie Sie den Splitter Abstand (nur noch ein paar Zeilen Code) erhöhen.

Anzeigen der Bar:

    for (int i = 0; i <= 33; i++)
    {
        splitContainer1.SplitterDistance = i;
        Thread.Sleep(5);
        Refresh();
    }

Ausblenden der Bar:

    for (int i = 33; i >= 0; i--)
    {
        splitContainer1.SplitterDistance = i;
        Thread.Sleep(5);
        Refresh();
    }

Natürlich, wenn Sie die Benachrichtigungsleiste einfach nichts dagegen den oberen Teil des Formulars abdeckt, dann können Sie nur die ganze Sache tun sehr leicht mit einem Panel. :)

Ich war auf der Suche für die gleiche Sache gerade jetzt und gefunden dieses auf Projekt-Code

Ich habe es noch nicht benutzt, also habe ich keine Ahnung, wie solide ist.

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