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

È stato utile?

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.

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