Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [C#] Creazione gallery

  1. #1

    [C#] Creazione gallery

    Salve,
    ho creato una pagina aspx con 4 controlli ScriptManager, UpdatePanel, Timer e Image che ho gestito da codice e due Label in cui inserisco nella prima il numero progressivo dell'immagine e nella seconda il numero totale di file della galleria.
    Nel browser vedo il contatore che avanza e l'etichetta con il totale delle foto, ma non vedo le immagini.
    Da cosa dipende?

    pagina aspx
    codice:
     <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick">
                    </asp:Timer>
                    <asp:Image ID="imgContenitore" runat="server" />
    
                    <%--contiene il numero progressivo dell'immagine in corso di visualizzazione--%>
                    <asp:Label ID="lblContatore" runat="server" Text=""></asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>
    
    
            <%--contiene il numero totale di file che la galleria è destinata a mostrare--%>
            <asp:Label ID="lblNumFiles" runat="server" Text=""></asp:Label>
    
        </div>


    code behind
    codice:
      protected void Page_Load(object sender, EventArgs e)
            {
                int numFiles;
                
                if (!IsPostBack)
                {
                    //inizializzo il contatore delle immagini
                    lblContatore.Text = "1";
    
                    //recupero il numero di immagini
                    numFiles = System.IO.Directory.GetFiles(Server.MapPath("Foto"),  "*.jpg").Length;
    
                    //salvo il dato nella label
                    lblNumFiles.Text = numFiles.ToString();
    
                    //inizializzo l'intervallo di Tick
                    Timer1.Interval = 2000;
    
                    //visualizzo la prima immagine
                    imgContenitore.ImageUrl = "Foto" + ".jpg";
    
                }
            }
    
            protected void Timer1_Tick(object sender, EventArgs e)
            {
    
                int contatore = Convert.ToInt32(lblContatore.Text);
                int numFiles = Convert.ToInt32(lblNumFiles.Text);
    
                //riazzero il contatore, se uguale al numero dei file da visualizzare, così ricomincia dalla prima immagine
                if (contatore >= numFiles)
                {
                    contatore = 0;
                }
                contatore = contatore + 1;
                lblContatore.Text = contatore.ToString();
                imgContenitore.ImageUrl = "Foto" + lblContatore.Text + ".jpg";
        
            }
        }

  2. #2
    a prima vista sembrerebbe corretto....

    le immagini sono nella stessa cartella della pagina?
    hai verificato che il timer lanci il postback e che venga richiamato il gestore dell'evento?

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    è quasi corretto.
    Ho provato a mettere alcune immagini nella directory logica /tmp, di nome Foto1.jpg, Foto2.jpg e Foto3.jpg

    il codice di sotto va
    codice:
      	protected void Page_Load(object sender, EventArgs e)
            {
                int numFiles;
                
                if (!IsPostBack)
                {
                    //inizializzo il contatore delle immagini
                    lblContatore.Text = "1";
    
                    //recupero il numero di immagini
                    numFiles = System.IO.Directory.GetFiles(Server.MapPath("/tmp"),  "*.jpg").Length;
    
                    //salvo il dato nella label
                    lblNumFiles.Text = numFiles.ToString();
    
                    //inizializzo l'intervallo di Tick
                    Timer1.Interval = 2000;
    
                    //visualizzo la prima immagine
                    imgContenitore.ImageUrl = "/tmp/Foto" + lblContatore.Text + ".jpg";
    
                }
            }
    
            protected void Timer1_Tick(object sender, EventArgs e)
            {
    
                int contatore = Convert.ToInt32(lblContatore.Text);
                int numFiles = Convert.ToInt32(lblNumFiles.Text);
    
                //riazzero il contatore, se uguale al numero dei file da visualizzare, così ricomincia dalla prima immagine
                if (contatore >= numFiles)
                {
                    contatore = 0;
                }
                contatore = contatore + 1;
                lblContatore.Text = contatore.ToString();
                imgContenitore.ImageUrl = "/tmp/Foto" + lblContatore.Text + ".jpg";
        
            }
    ps. però mi pare troppo limitativo legare il tutto al particolare nome delle immagini.
    Perchè non ricavare un vettore delle immagini (di nome qualunque) e richiamarle tramite il suo indice?
    Pietro

  4. #4
    Le immagini sono dentro un cartella e la cartella è nel progetto, ma è a sè dalla pagina che ho creato. Ma questo non credo influisca. Non riesco a capire cosa manca in questo codice

  5. #5
    se scrivi questo:
    imgContenitore.ImageUrl = "Foto" + ".jpg";
    vuol dire che le immagini devono stare nella stassa cartella della pagina.
    altrimendi devi scrivere:

    codice:
    imgContenitore.ImageUrl = "/nomedellacartella/Foto.jpg";

  6. #6
    Ho cambiato il path nell'ImageUrl del contenitore delle immagini
    La cartella l'ho chiamata Images

    codice:
     imgContenitore.ImageUrl = "~/Images/";

    ogni 3 secondi dovrei vedere l'immagine, ma quando il timer scatta non la vedo, vedo solo un riquadro un istante di secondo che poi scompare, non riesco a capire

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da LorenaRm82
    Ho cambiato il path nell'ImageUrl del contenitore delle immagini
    La cartella l'ho chiamata Images

    codice:
     imgContenitore.ImageUrl = "~/Images/";

    ogni 3 secondi dovrei vedere l'immagine, ma quando il timer scatta non la vedo, vedo solo un riquadro un istante di secondo che poi scompare, non riesco a capire
    quello non dà l'indirizzo di una immagine ma l'indirizzo della directory che le contiene


    così va?

    imgContenitore.ImageUrl = "~/Images/Foto1.jpg";
    Pietro

  8. #8
    No non va, si genera un'eccezione che dice che i caratteri non sono validi

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    quello di sotto è il tuo codice c# modificato come ho detto e ti assicuro che funziona

    di più non so

    codice:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="a.aspx.cs" Inherits="prove_a" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
     <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick">
                    </asp:Timer>
                    <asp:Image ID="imgContenitore" runat="server" />
    
                    <%--contiene il numero progressivo dell'immagine in corso di visualizzazione--%>
                    <asp:Label ID="lblContatore" runat="server" Text=""></asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>
    
    
            <%--contiene il numero totale di file che la galleria è destinata a mostrare--%>
            <asp:Label ID="lblNumFiles" runat="server" Text=""></asp:Label>
    
        </div>
        </form>
    </body>
    </html>
    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class prove_a : System.Web.UI.Page
    {
      	protected void Page_Load(object sender, EventArgs e)
            {
                int numFiles;
                
                if (!IsPostBack)
                {
                    //inizializzo il contatore delle immagini
                    lblContatore.Text = "1";
    
                    //recupero il numero di immagini
                    numFiles = System.IO.Directory.GetFiles(Server.MapPath("~/Images"), "*.jpg").Length;
    
                    //salvo il dato nella label
                    lblNumFiles.Text = numFiles.ToString();
    
                    //inizializzo l'intervallo di Tick
                    Timer1.Interval = 2000;
    
                    //visualizzo la prima immagine
                    imgContenitore.ImageUrl = "~/Images/Foto" + lblContatore.Text + ".jpg";
    
                }
            }
    
            protected void Timer1_Tick(object sender, EventArgs e)
            {
    
                int contatore = Convert.ToInt32(lblContatore.Text);
                int numFiles = Convert.ToInt32(lblNumFiles.Text);
    
                //riazzero il contatore, se uguale al numero dei file da visualizzare, così ricomincia dalla prima immagine
                if (contatore >= numFiles)
                {
                    contatore = 0;
                }
                contatore = contatore + 1;
                lblContatore.Text = contatore.ToString();
                imgContenitore.ImageUrl = "~/Images/Foto" + lblContatore.Text + ".jpg";
        
            }
        
    }
    Pietro

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ps

    le immagini ho supposto che si chiamino

    Foto1.jpg
    Foto2.jpg
    ...
    Foton.jpg
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.