Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    [C#]Assegnare dati a PictureBox

    Ciao a tutti,

    volevo chiedervi se potevate aiutarmi con quest'altro mio problema.

    Questa volta si tratta di caricare un file di testo contente delle informazioni da assegnare a tutte le PictureBox situate nel pannello in un Form.

    codice:
            public static void LoadCitySettings(Panel pnl, string path)
            {
    
                GamesModules.MainGame mG = new GamesModules.MainGame();
    
                using (StreamReader SR = new StreamReader(path))
                {
    
                        while (SR.EndOfStream == false)
                        {
    
                            foreach (Control ctrl in mG.gameport.Controls)
                            {
                                if (ctrl is PictureBox)
                                {
    
                                    ctrl.Name = SR.ReadLine();
                                    ctrl.Tag = SR.ReadLine();
                                    ctrl.AccessibleDescription = SR.ReadLine();
    
                                }
                            }
    
                        }
    
                        SR.Close();
    
                    }       
                
            }
    In questo modo i dati non vengono assegnati alla PictureBox.

    Ho anche provato in questo modo:

    codice:
                using (StreamReader SR = new StreamReader(path))
                {
    
                    while (SR.EndOfStream == false)
                    {
    
                        foreach (Control ctrl in pnl.Controls)
                        {
                            if (ctrl is PictureBox)
                            {
    
                                MessageBox.Show(ctrl.Name);
    
                            }
                        }
    
                    }
    
                    SR.Close();
    
                }
    
            }
    ma l'applicazione si blocca.

    in VB.NET facevo in questo modo e funzionava ma in C# a quanto pare non funziona...

    come posso risolvere?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Re: [C#]Assegnare dati a PictureBox

    Originariamente inviato da GhostFire
    Ho anche provato in questo modo:
    [...]
    ma l'applicazione si blocca.
    Se non leggi dati dallo StreamReader, non riuscirai mai a raggiungere l'EndOfStream.
    A che serve aprire il file con questa classe se poi non viene letto nulla?


    Originariamente inviato da GhostFire
    in VB.NET facevo in questo modo e funzionava ma in C# a quanto pare non funziona...
    Il problema è legato a un errore nel tuo codice: le differenze sintattiche tra VB.NET e C# non c'entrano nulla.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    Re: Re: [C#]Assegnare dati a PictureBox

    Originariamente inviato da alka
    Se non leggi dati dallo StreamReader, non riuscirai mai a raggiungere l'EndOfStream.
    A che serve aprire il file con questa classe se poi non viene letto nulla?




    Il problema è legato a un errore nel tuo codice: le differenze sintattiche tra VB.NET e C# non c'entrano nulla.
    I dati vengono letti.

    Se levo il foreach e metto all'interno del While un MessageBox.Show(SR.READLINE()) legge tutto quanto.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Re: Re: [C#]Assegnare dati a PictureBox

    Originariamente inviato da GhostFire
    I dati vengono letti.

    Se levo il foreach e metto all'interno del While un MessageBox.Show(SR.READLINE()) legge tutto quanto.
    Beh ... ovvio ... è la SR.READLINE() che legge ... ma nel codice che hai mostrato prima non c'è ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Non funziona uguale...

    codice:
            public static void LoadCitySettings(Panel pnl, string path)
            {
    
                using (StreamReader SR = new StreamReader(path))
                {
    
                    while (SR.EndOfStream == false)
                    {
    
                        foreach (Control ctrl in pnl.Controls)
                        {
                            if (ctrl is PictureBox)
                            {
    
                                ctrl.Name = SR.ReadLine();
                                MessageBox.Show(ctrl.Name); // per verificare se il dato è stato assegnato
    
                            }
                        }
    
                    }
    
                    SR.Close();
    
                }
    
            }
    l'applicazione si blocca...senza dare errori...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In che senso si blocca ? Quanti MessageBox vedi ?

    Non sai fare un po' di debugging ? Esegui linea dopo linea ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Il messagebox non parte.

    L'applicazione si blocca appena arriva al foreach, difatti se lo levo e metto così:

    codice:
            public static void LoadCitySettings(Panel pnl, string path)
            {
    
                using (StreamReader SR = new StreamReader(path))
                {
    
                    while (SR.EndOfStream == false)
                    {
                              
                                MessageBox.Show("CIAO");
                                            
                    }
    
                    SR.Close();
    
                }
    
            }
    il messaggio viene visualizzato.

    Altrimenti se provo a mettere un foreach con qualunque cosa all'interno di esso non viene eseguita.

    oppure proprio ora mi viene in mente di aggirare il problema inserendo dei prefissi ai dati del tipo:

    NAME=
    TAG=
    AccesibleDescription=

    e al caricamento li splitto e li assegno alla corrispondenza.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A questo punto c'è da chiedersi ... in

    pnl.Controls

    esistono dei controlli?

    (non se li vedi nel pannello, ma se sono effettivamente "figli" del pannello)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Trovo che la logica con cui sono sviluppati questi cicli non abbia senso: tu scandisci un file fino ad esaurimento facendo un ciclo e testando EndOfStream, tuttavia vi sono delle possibili condizioni che possono impedire di leggere dati dal file e quindi quella condizione non verrà mai raggiunta.

    Se leggi un file fino a quando questo non è finito e c'è una condizione che previene la lettura, non arriverai mai in fondo.

    Per scoprire perché devi eseguire il programma passo passo facendo obbligatoriamente debugging: se non sai cos'è, ricerca e fallo.

    Se dal file devi caricare informazioni specifiche facendo cicli su oggetti, allora dovrai usare un formato di file compatibile in cui, in base all'elemento corrente del ciclo (che sia un pannello o una banana) vai a individuare le informazioni che occorrono all'interno del file.

    Se invece fai una scansione direttamente sul file leggendo ad esempio riga per riga, quel file deve essere consumato e il ciclo di scansione deve guidare l'esecuzione della procedura (andrai quindi a determinare il pannello o la banana in base alle informazioni che acquisisci dalla riga corrente).

    E' chiaro che se apri un file e per qualche motivo non lo leggi, non arriverai mai alla sua fine.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Allora,ho fatto un po' di debugging e ho sistemato un po' il codice e usando lo split.

    codice:
            public static void assignCitySettings()
            {
    
                GamesModules.MainGame mg = new GamesModules.MainGame();
    
                for (int i = 0; i < AllData.Count; i++)
                {
                    string s = AllData[i];                  // AllData corrisponde ai dati da leggere
                    string[] split = s.Split('=');
    
                    for (int c = 0; c < mg.gameport.Controls.Count; c++)   // Gameport è il Panel
                    {
    
                        if (mg.gameport.Controls[c] is PictureBox)
                        {
    
                            Console.WriteLine(mg.gameport.Controls[c].Name);
    
                            if (split[0] == "NAME")
                            {
    
                                mg.gameport.Controls[c].Name = split[1];
    
                            }
    
                        }
                        
                    }
    
                }
    
            }
    Sulla console mi escono scritti correttamente tutti i nomi ma quando la funzione termina tutto torna come prima. (difatti una volta finito il caricamento se su un altro pulsante metto un MessageBox che mi visualizza il nome di ogni PictureBox nel gameport escono scritti i nomi originali (PictureBox1,2 e ecc)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.