Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Θα με σκάσει (PointF Array)

Îåêßíçóå áðü ôï ìÝëïò Firebrand. Τελευταία δημοσίευση από το μέλος Firebrand στις 06-07-2009, 19:10. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-07-2009, 18:16 52271

    Θα με σκάσει (PointF Array)

    Γεια χαρά σε όλους.

    Θα με τρελάνει...

    Έχω ένα PointF Array

    Private pLinePoints() as PointF

    Επίσης έχω μια μεταβλητή PointF η οποία μέσα σε μια loop αλλάζει τιμές και θέλω αυτές τις τιμές να τις βάζω στο Array...

    Γιατί έχω κολλήσει...???? Τα νεύρα μου.

    Δεν θα σας κουράσω με άρχηστο κώδικα απλά να σας πω ότι κάπου το i παίρνει μια αρχική τιμή και μετά αρχίζει το loop. Επίσης απο κάπου παίρνουν τιμές και τα Χ και Υ.
    Όλα δουλεύουν σωστά (φαίνονται κανονικά από τα Watches του Debug). Το μόνο μου πρόβλημα είναι: Object reference not set to an instance of an object μόλις φτάσει στην γραμμή που έχω κάνει Bold

    Public Class Georef
         Private pLinePoints() as PointF
         Private i as integer
         Private GPoints as PointF

    Public Sub WritePoints()
          while i < 1000
                GPoints = New PointF(X, Y)
                pLinePoints.setvalue(GPoints, i)
          End While
    End Sub

    End Class

    Θα με τρελάνει. Κάτι μου διαφεύγει και είναι κραυγαλέο αλλά έχει κολλήσει το μυαλό μου και ακόμα και όταν δίνω new πάλι !@##$$## μου κάνει.
    Λίγο βοήθεια θα ήταν σημαντική. Θέλω απλά το PointF να μπαίνει στο PointF Array.
                


  •  06-07-2009, 18:54 52272 σε απάντηση της 52271

    Απ: Θα με σκάσει (PointF Array)

    Η γραμμή Private pLinePoints() as PointF ορίζει μόνο τη μεταβλητή, δεν δημιουργεί και τον πίνακα. Λογικό είναι να πάρεις Null Reference Exception αμέσως μόλις προσπαθήσεις να χρησιμοποιήσεις το pLinePoints. Έτσι κι αλλιώς, η SetValue απλά αλλάζει το περιεχόμενο μίας υπάρχουσας θέσης στον πίνακα, δεν προσθέτει καινούριες εγγραφές. Είναι σαν να έγραψες pLinePoints(i)=GPoints. Για να δημιουργήσεις τον πίνακα θα πρέπει να γράψεις Private pLinePoints(999) as PointF.

    Ο κώδικας σου έχει και άλλα προβλήματα. Έτσι όπως έχεις το while θα γράφεις πάντα στη θέση 0 και το πρόγραμμα θα κολλήσει στο loop. Ακόμα και αν χρησιμοποιήσεις for ή αν αυξήσεις το i, θα έχεις πρόβλημα με την SetValue. To PointF είναι structure που σημαίνει ότι όταν ορίζεις τον πίνακα δημιουργούνται αμέσως και τα 1000 σημεία του πίνακα. Το loop σου ουσιαστικά πετάει 1000 PointF για να φτιάξει άλλα 1000. Τέλος, ο ορισμός των μεταβλητών έξω από τη μέθοδο που χρησιμοποιούνται είναι ΠΑΡΑ πολύ κακή τακτική. 

    Αντί να χρησιμοποιείς ένα πίνακα είναι προτιμότερο να χρησιμοποιήσεις μία λίστα, η οποία παρέχει την Add για να προσθέσεις νέα σημεία.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-07-2009, 19:02 52273 σε απάντηση της 52272

    Απ: Θα με σκάσει (PointF Array)

    Ευχαριστώ. Έχει λαθάκια ο κώδικας που έδωσα αλλά τον δίνω μόνο σαν παράδειγμα. Αυτο με increment μου ξέφυγε από το copy - paste. Τέσπα. Μην δίνεις σημασία στις δηλώσεις των μεταβλητών. Αυτό που με ενδιαφέρει αυτή τη στιγμή είναι πως θα βάζω και άλλες εγγραφές μέσα στο Array.

    Θα το δω και θα ανανεώσω...
  •  06-07-2009, 19:10 52274 σε απάντηση της 52273

    Απ: Θα με σκάσει (PointF Array)

    ΝΑΑΑΑΑΙΙΙΙΙΙΙΙΙ!!!

    Το είπα εγώ ότι κάτι κραυγαλέο μου διέφευγε. Όπως το είπες. Δεν δήλωνα το μέγεθος του πίνακα. A mile thanks. Χίλια ευχαριστώ.

    Εκεί που νομίζεις ότι ξεπέρασες τέτοια λάθη...

    Ευχαριστώ πολύ.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems