Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problemino strano
Forum - C# / VB.NET - Problemino strano

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 1:20
Lunedì, 28/03/2016
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

Codice sorgente - presumibilmente C#

  1. /// <summary>
  2.         /// Struttura tileset
  3.         /// i point sono definiti come punti di ostacoli.
  4.         /// se esempio è definito 3,5 sarà 3 * 32 X 5 * 32 , 32 ,32
  5.         /// </summary>
  6.         [Serializable]
  7.         public struct _tileset
  8.         {
  9.  
  10.             public string filename;
  11.             public string tilename;
  12.             public int id;
  13.             public List<Point> point;          
  14.         }
  15.  
  16.  
  17. 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:

Codice sorgente - presumibilmente C# / VB.NET

  1. MappyLib.Database._tileset t = new MappyLib.Database._tileset();
  2.  
  3.             for (int i = 0; i < 10; i++)
  4.             {
  5.                 t.filename = project_path + "\\" + project_name + "\\Content\\data\\Tileset\\" + nsTextBox150.Text;
  6.                 t.id = i;
  7.                 t.tilename = "a";
  8.                 for (int j = 0; j < i * 5; j++)
  9.                 {
  10.                     t.point.Add(new Point(5,5));   // Errore qui
  11.                 }
  12.             }
  13.  
  14.             db.Tileset.Add(t);
  15.  
  16.  
  17.             for (int i = 0; i < db.Tileset.Count; i++)
  18.             {
  19.                 MessageBox.Show(string.Format("Tileset:{0}\nNome:{1}\nOstacoli:{2}", db.Tileset[i].filename, db.Tileset[i].tilename, db.Tileset[i].point.Count()));
  20.             }



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 )
Codice sorgente - presumibilmente C# / VB.NET

  1. MappyLib.Database._tileset t = new MappyLib.Database._tileset();
  2.                 t.filename = proj_path + "\\" + proj_name + "\\Content\\data\\Tileset\\" + ComboBox6.Text;
  3.                 t.id = tilelist.Items.Count;
  4.                 t.tilename = TextBox7.Text;
  5.                 t.point = ostacoli;  //ostacoli.  Lista <Point> Provvisoria vuota.
  6.                 tilelist.Items.Add(t.tilename);
  7.                 db.Tileset.Add(t);
  8.  
  9.  
  10.                 Assembly a = Assembly.Load("Languague");
  11.                 ResourceManager rm = new ResourceManager("Languague.Italian", a);
  12.                 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 )

Codice sorgente - presumibilmente Plain Text

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




C: (Salvataggio dei valori)
Codice sorgente - presumibilmente C# / VB.NET

  1. MappyLib.Database._tileset t = new MappyLib.Database._tileset();
  2.             t = db.Tileset[tileid];
  3.  
  4.             db.Tileset[tileid] = t; //rimpiazzo il salvataggio




C: (Recupero dei valori precedentemente creati)

Codice sorgente - presumibilmente C# / VB.NET

  1. ostacoli.Clear(); //svuoto la lista provvisoria
  2.  
  3.             string nome = tilelist.Items[tilelist.SelectedIndex].ToString();
  4.             MappyLib.Database._tileset t = new MappyLib.Database._tileset();
  5.  
  6.             //Ciclo, recupero il nome del tiles selezionato dalla lista
  7.             //se quello selezionato dall'utente è presente nel database dei tileset
  8.             //imposto la struttura t con i valori recuperati
  9.             for (int i = 0; i < db.Tileset.Count; i++)
  10.             {
  11.                 if (db.Tileset[i].tilename == nome)
  12.                 {
  13.                     t = db.Tileset[i];
  14.                     tileid = i;
  15.                 }
  16.             }
  17.            
  18.            
  19.  
  20.             TextBox7.Text = t.tilename;
  21.             ostacoli = t.point;
  22.             pictureBox14.Image = Image.FromFile(t.filename);
  23.             pictureBox14.Refresh();
  24.             RicaricaPassaggi(t);
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31. /// <summary>
  32.         /// Ricarico dove si può passare e dove no
  33.         /// </summary>
  34.         /// <param name="t"></param>
  35.         public void RicaricaPassaggi(MappyLib.Database._tileset t)
  36.         {
  37.             Graphics g = Graphics.FromHwnd(pictureBox14.Handle);
  38.  
  39.             for (int i = 0; i < t.point.Count; i++)
  40.             {
  41.                 g.DrawImage(Properties.Resources.image__www_imagesplitter_net__13_0,new Rectangle(t.point[i].X,t.point[i].Y,32,32));
  42.             }
  43.         }




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?


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:54
Lunedì, 28/03/2016
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à.
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:10
Martedì, 29/03/2016
ecco.
non ci avevo proprio pensato.

grazie nessuno provo e ti dico com'è andata


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote