Oppure

Loading
27/03/16 23:20
Thejuster
Salve ragazzi.

Credo o che sia l'ora, magari lo stress, o che mi perdo tra l'enorme grandezza del progetto.
Ma in tutta la giornata non ne sono venuto a capo.
forse sbaglio qualche cavolata che non riesco a capire dove sta.

Ed'è pure strano che chiedo aiuto su questa cosa.
ma non trovo il motivo di questo errore.
Magari sta proprio sotto al mio naso e non me ne rendo conto.


partiamo dalla struttura

/// <summary>
        /// Struttura tileset
        /// i point sono definiti come punti di ostacoli.
        /// se esempio è definito 3,5 sarà 3 * 32 X 5 * 32 , 32 ,32
        /// </summary>
        [Serializable]
        public struct _tileset
        {

            public string filename;
            public string tilename;
            public int id;
            public List<Point> point;           
        }


public List<_tileset> Tileset = new List<_tileset>();




Test n° 1: Prova di inserimento valori per testare eventuali problemi
Errore: Riferimento a un oggetto non impostato su un'istanza di oggetto.


Codice:


MappyLib.Database._tileset t = new MappyLib.Database._tileset();

            for (int i = 0; i < 10; i++)
            {
                t.filename = project_path + "\" + project_name + "\Content\data\Tileset\" + nsTextBox150.Text;
                t.id = i;
                t.tilename = "a";
                for (int j = 0; j < i * 5; j++)
                {
                    t.point.Add(new Point(5,5));   // Errore qui
                }
            }

            db.Tileset.Add(t);


            for (int i = 0; i < db.Tileset.Count; i++)
            {
                MessageBox.Show(string.Format("Tileset:{0}\nNome:{1}\nOstacoli:{2}", db.Tileset[i].filename, db.Tileset[i].tilename, db.Tileset[i].point.Count()));
            }




Dal debugger il t.point è null.



Test alternativo: Inserimento valori

Erorre: la lista Point non viene aggiornata rimane sempre su 0


Codice:

A ( Creazione di un elemento )

MappyLib.Database._tileset t = new MappyLib.Database._tileset();
                t.filename = proj_path + "\" + proj_name + "\Content\data\Tileset\" + ComboBox6.Text;
                t.id = tilelist.Items.Count;
                t.tilename = TextBox7.Text;
                t.point = ostacoli;  //ostacoli.  Lista <Point> Provvisoria vuota.
                tilelist.Items.Add(t.tilename);
                db.Tileset.Add(t);


                Assembly a = Assembly.Load("Languague");
                ResourceManager rm = new ResourceManager("Languague.Italian", a);
                MessageBox.Show(rm.GetString("tilest_msg149"), "Mire", MessageBoxButtons.OK, MessageBoxIcon.Error);



B: ( Inserimento di prova sia nella lista ostacoli che in quella Point della struttura )


 ostacoli.Add(new Point(x, y));
 db.Tileset[tileid].point.Add(new Point(x, y));




C: (Salvataggio dei valori)

            MappyLib.Database._tileset t = new MappyLib.Database._tileset();
            t = db.Tileset[tileid];

            db.Tileset[tileid] = t; //rimpiazzo il salvataggio




C: (Recupero dei valori precedentemente creati)


 ostacoli.Clear(); //svuoto la lista provvisoria

            string nome = tilelist.Items[tilelist.SelectedIndex].ToString();
            MappyLib.Database._tileset t = new MappyLib.Database._tileset();

            //Ciclo, recupero il nome del tiles selezionato dalla lista
            //se quello selezionato dall'utente è presente nel database dei tileset
            //imposto la struttura t con i valori recuperati
            for (int i = 0; i < db.Tileset.Count; i++)
            {
                if (db.Tileset[i].tilename == nome)
                {
                    t = db.Tileset[i];
                    tileid = i;
                }
            }
            
            

            TextBox7.Text = t.tilename;
            ostacoli = t.point;
            pictureBox14.Image = Image.FromFile(t.filename);
            pictureBox14.Refresh();
            RicaricaPassaggi(t);






/// <summary>
        /// Ricarico dove si può passare e dove no
        /// </summary>
        /// <param name="t"></param>
        public void RicaricaPassaggi(MappyLib.Database._tileset t)
        {
            Graphics g = Graphics.FromHwnd(pictureBox14.Handle);

            for (int i = 0; i < t.point.Count; i++)
            {
                g.DrawImage(Properties.Resources.image__www_imagesplitter_net__13_0,new Rectangle(t.point[i].X,t.point[i].Y,32,32));
            }
        }





In questo caso, l'operazione per aggiungere gli elementi alla lista Tileset funziona.
ma quando recupero i valori,
il numero di elementi presenti nella lista point contenuta nella struttura è sempre = a 0.

Riuscite a capire dov'è il problema?
mire.forumfree.it/ - Mire Engine
C# UI Designer
28/03/16 9:54
nessuno
Evidentemente prima di aggiungere i punti alla lista, la lista deve esistere. Quindi, prima della for che aggiunge i punti manca

t.point = new List<Point>();
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
29/03/16 8:10
Thejuster
ecco.
non ci avevo proprio pensato.

grazie nessuno provo e ti dico com'è andata
mire.forumfree.it/ - Mire Engine
C# UI Designer