WM6 .Net Form Effects C #
-
06-07-2019 - |
Domanda
Vorrei sapere se è possibile creare effetti di forma piacevoli sul framework compatto.
Il mio piano è che quando un utente seleziona un'immagine nel modulo principale, questo viene aperto in un nuovo modulo, attualmente funziona. Quello che ora voglio fare è creare il modulo che contiene l'immagine a schermo intero da caricare dal bordo (sinistro o destro) dello schermo a circa 4 pixel di altezza, quindi scorrere in vista. Una volta che il modulo è completamente sullo schermo, espandi l'altezza fino a raggiungere il massimo per lo schermo.
Alla chiusura, vorrei ridurre di nuovo l'altezza fino a 4 pixel di altezza e far scorrere di nuovo il bordo prima di disporre il modulo.
Ho provato il codice seguente durante l'istanza del modulo e la proprietà dp.Top era sempre 0 indipendentemente da dp.Width == 240
DisplayPicture dp = new DisplayPicture(ImageUrl);
dp.WindowState = FormWindowState.Normal;
dp.Left = dp.Width * -1;
dp.Top = (dp.Height / 2) - 2;
dp.Height = 4;
dp.ShowDialog();
All'interno del modulo DisplayPicture ho anche quanto segue per provare a spostare il modulo ma poiché non imposta la proprietà Top questo codice non ha ancora importanza.
void t_Tick(object sender, EventArgs e)
{
if (this.Left < 0)
this.Left += 5;
if (this.Left > -1)
{
this.Left = 0;
if (this.Height < pictureBox1.ClientRectangle.Height)
{
this.Height += 4;
this.Top -= 2;
}
if ((this.Left == 0) && (this.Top == 0))
t.Enabled = false;
}
}
Qualsiasi aiuto sarebbe molto apprezzato!
TIA
OneShot
Soluzione
Per fare ciò, inizia con un controllo PictureBox con l'immagine caricata. Imposta l'altezza su 4, la larghezza sulla larghezza del modulo e (molto importante) imposta SizeMode di PictureBox su StretchImage .
Quindi, posizionare PictureBox fuori dallo schermo impostando Top su 0 e Left su -Width. Inserire un controllo Timer nel modulo con un intervallo di 100 (o qualsiasi altra cosa) e fare in modo che il suo evento sposta gradualmente PictureBox verso destra fino a quando la sua proprietà di sinistra è 0. Una volta raggiunto quel punto, fare in modo che l'evento timer aumenti gradualmente l'altezza fino a raggiunge l'altezza del modulo.
Probabilmente dovrai occuparti dello sfarfallio, ma questo dovrebbe iniziare.
Aggiornamento: ho appena letto la tua domanda un po 'più da vicino e ho capito che in realtà vuoi spostare il modulo stesso dallo schermo intero allo schermo intero. Questo non è possibile se si desidera animare l'intero modulo (compresa la barra del titolo in alto) in questo modo, ma è possibile farlo impostando FormBorderStyle del modulo (o penso che sia chiamato BorderStyle in Compact Framework) a nessuno. Con BorderStyle impostato su Nessuno, la modifica delle proprietà Altezza, Larghezza, Superiore e Sinistra avrà effettivamente un effetto visibile sul modulo (sebbene il modulo sia senza bordi). In caso contrario, queste proprietà vengono ignorate completamente in Windows Mobile , motivo per cui il codice non sembra fare nulla.
Aggiornamento 2: ecco la mia risposta a una domanda WM simile, che può aiutarti a rendere la tua finestra animata simile a una finestra reale.