Domanda

Tutti voi sapete "nuove risposte che hai!", Il barra di notifica su SO. Mi piacerebbe la stessa cosa in un modulo, preferibilmente altrettanto liscio. C'è un modo semplice? O devo creare completamente questo me stesso?

Le mie ricerche non hanno prodotto alcun risultato buono, solo un sacco di barre di avanzamento e popup nell'area di notifica del sistema, ma non è quello che sto cercando.

I messaggi che voglio visualizzazione appartengono a un modulo, non l'intera applicazione

È stato utile?

Soluzione

Creare due pannelli nel modulo, un pannello di notifica agganciato alla parte superiore e inferiore a quello di un pannello di contenuti ancorato al top. Nella tua Form.Load, impostare l'altezza del pannello di notifica a zero. Non impostare l'altezza a zero in Design View, non sarà in grado di fare clic sul pannello di notifica di modificarla.

Poi, quando si ottiene una notifica, disegnare i contenuti nel pannello di notifica e creare uno System.Windows.Form.Timer che aumenta l'altezza del pannello di notifica di alcuni pixel ogni poche decine di millisecondi o giù di lì. Fermarsi quando il pannello è di l'altezza desiderata. Fate lo stesso con un'altezza negativo per nascondere il pannello.

Questo non richiede riverniciatura o ricalcolando dimensioni o posizioni di qualsiasi cosa, non si overdraw nulla, e guarda chiazza di petrolio. Ho fatto questo e funziona.

Altri suggerimenti

Si potrebbe semplicemente animare un pannello di cadere giù dalla parte superiore dell'area client del form.

Aumentare la coordinata y del pannello in un ciclo temporizzato. Il pannello inizierebbe invisibile e lentamente diventato visibile. (Il pannello inizierebbe a -panel.height e lavorare la sua strada fino a 0).

Se si desidera vincolato ad una forma particolare, dovrebbe essere abbastanza facile inserire un Panel sul modulo con il suo set Dock a DockStyle.Top, quindi inserire un'etichetta per la descrizione e un pulsante che nasconde.

Non è difficile da fare con un pannello o un UserControl, ma la parte laborioso sta facendo il contenuto del modulo di scorrimento verso il basso come il bar scivola giù. Per semplificare che avrei usato uno SplitContainer. Lo splitpanel superiore contiene la barra di notifica e la distanza splitter è inizialmente 0. scorrere la barra in vista incrementando la struttura SplitterDistance. Farlo questo mezzo modo non ci si deve preoccupare di fare gli altri contenuti del definisce la forma di diapositive (che è una seccatura perché ti impedisce di utilizzare una docking).

L'unico aspetto negativo di utilizzare SplitContainer mi viene in mente è che l'animazione della barra sarà leggermente diversa: il testo non verrà scorrere verso il basso con il bar, che sarà rivelato al suo posto come il bar scivola giù. Se questo vi preoccupa, è possibile risolvere il problema da avere il testo (o il vostro pannello di controllo / personalizzato) scivolare verso il basso come si aumenta la distanza splitter (solo un altro paio di righe di codice).

Mostra la barra:

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

Come nascondere la barra:

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

Naturalmente, se non ti dispiace la barra di notifica è sufficiente che copre la parte superiore del modulo, allora si può solo fare il tutto molto facilmente con un pannello. :)

che stavo cercando la stessa cosa in questo momento e l'ho trovato questo sul progetto di codice

Non ho ancora utilizzato, quindi non ho idea di come sia solida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top