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

 

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

Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

Îåêßíçóå áðü ôï ìÝëïò IXC. Τελευταία δημοσίευση από το μέλος KelMan στις 29-10-2009, 14:01. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-10-2009, 11:51 54800

    Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

    Θα προσπαθήσω να περιγράψω το πρόβλημα όσο πιο απλά μπορώ μήπως και μπορέσετε να με βοηθήσετε ρε παιδιά.

    Έχω την παρακάτω Class

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Public Class Person
    #Region "Properties & Variables"
    
    Private _Name As Integer
    Public Property Name() As Integer
       Get
          Return _Name
    End Get
    Set(ByVal value As Integer)
       _Name = value
    End Set
    End Property
    
    Private _Phone As Integer
    Public Property Phone() As Integer
       Get
       Return _Phone
    End Get
    Set(ByVal value As Integer)
    _Phone = value
    End Set
    End Property
    

    #End Region

    End Class

    Σε μια φόρμα την Form1 την καλώ και στο Load event γεμίζω τα Properties

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class Form1
    Private oPerson as new Person
    
    Private Sub Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    
    oPerson.Name = "ΑστραπόΓιαννος"
    OPerson.Phone = "99999999999"
    
    End Sub
    
    End Class

    Mέχρι εδω καλά

    Έχω όμως άλλη μια φόρμα η οποία είναι η Form2. Και εκεί κάνω το εξής :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class Form2
    Private oPerson as new Person
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1_Click
    
    if oPerson.name = "" then 
        msgbox("Βάλε όνομα")
    End if
    
    End Sub
    
    End Class

    Η απορία μου είναι η εξής τώρα. Πως στην 2 φόρμα το Property Name θα έχει τιμή αφού εγώ στην αρχή δημιουργώ ενα νέο Instance της Κλάσης Person;
    Ένας τρόπος θα μου πεί κάποιος είναι να δώσω τιμές στο Construct της κλάσης αν δεν λέω σαχλαμάρες.

    Δηλαδή

    Private oPerson as new Person(Byval Name as string, Byval Phone as integer)
    Αλλά νομίζω δεν είναι το σωστό διότι αν έχω 100 properties τι σοι construct θα φτιάξω.
    Στην ουσία αυτό που θέλω είναι η κλάση Person να παίρνει τιμές μια φορά και να της χρησιμοποιώ σε όλη την εφαρμογή μου κάθε φορά.
    Εξηγήστε μου λίγο διότι νομίζω ότι δεν έχω κατανοήσει πλήρως τον αντικειμενοστραφή προγραμματισμό Sad

     

    Ευχαριστώ

  •  29-10-2009, 12:59 54801 σε απάντηση της 54800

    Απ: Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

    Μια τεχνική είναι να φτιάξεις ένα property τύπου Person στη Form2 και να του δίνεις τιμή πριν δείξεις τη Form2.  

    Public Class Form2
    
        Sub New()
            InitializeComponent()
    
            _activePerson = New Person() With {.Name = "aaa", .Phone = "999"}
        End Sub
    
        Private _activePerson As Person
        Public Property ActivePerson() As Person
            Get
                Return _activePerson
            End Get
            Set(ByVal value As Person)
                _activePerson = value
            End Set
        End Property
    
    End Class

    Κατόπιν, στην Form1 θα έχεις κάτι σαν:

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim frmA As Form2 = New Form2
            frmA.ShowDialog()
    MessageBox.Show(frmA.ActivePerson)
            Dim newPerson As Person = New Person With {.Name = "xxxx", .Phone = "0000"}
            Dim frmB As Form2 = New Form2
            frmB.ActivePerson = newPerson
    frmΒ.ShowDialog()
    MessageBox.Show(frmB.ActivePerson) End Sub End Class

    Παρατήρησε ότι στην περίπτωση της frmA, το _activePerson object θα είναι αυτό που έχει κάνει initialize η ίδια φόρμα. Στην περίπτωση της frmB, το _activePerson είναι το newPerson της Form1.

    Εναλλακτικά, μπορείς να περάσεις ένα Person object και στον constructor της Form2 ωστόσο το property και πάλι θα το χρειαστείς ώστε να διαβάσεις μετά το τι έχει κάνει ο χρήστης σε αυτό.

    Από την άλλη, αν βάλεις να περνάς το Person στον constructor, όπως εδώ

    Public Class Form2
    Private Sub New() End Sub
    Sub New(ByVal activePerson As Person) InitializeComponent() If activePerson Is Nothing Then _activePerson = New Person() With {.Name = "aaa", .Phone = "999"} Else _activePerson = activePerson End If End Sub Private _activePerson As Person Public Property ActivePerson() As Person Get Return _activePerson End Get Set(ByVal value As Person) _activePerson = value End Set End Property End Class

    Τότε θα πρέπει υποχρεωτικά να δώσεις ως παράμετρο ένα Person όταν φτιάχνεις το instance της Form2 γιατί θα στο θυμίσει το intellisense, δεν θα σε αφήσει δηλαδή να γράψεις

    Dim frmB As Form2 = New Form2()


    θα πρέπει να γράψεις

    Dim newPerson As Person = New Person With {.Name = "xxxx", .Phone = "0000"}
    Dim frmB As Form2 = New Form2(newPerson)

    ή

    Dim frmB As Form2 = New Form2(Nothing)


     

     

     

     

     

     

     


    Vir prudens non contra ventum mingit
  •  29-10-2009, 13:25 54805 σε απάντηση της 54801

    Απ: Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

    Νομίζω δεν έγινα κατανοητός ή δεν κατανοώ την απάντηση σου.

    Το ζητούμενο είναι το εξής.
    Έχω μια φόρμα Α που ζηταέι απο τον χρήστη να φέρει εναν πελάτη.
    Ο χρήστης πατάει ενα κουμπάκι και ανοίγει ενα παράθυρακι με μια λίστα πελατών.
    Τον πελάτη τον έχω ορίσει σε μια κλάση ονόματι Person και γεμίζω τα Properties Name και Phone κλπ απο την βάση την ώρα που τον επιλέγει ο χρήστης.

    Στην φόρμα Α λοιπόν τα properties Name & Phone έχουν πλέον τιμές και μπορούμε να δουλέψουμε με αυτές.
    Στην συνέχεια ο χρήστης πατάει ενα κουμπάκι πάλι στην φόρμα Α και ανοίγει μια φόρμα Β όπου εκεί θέλω να μεταφέρω τις τιμές που έχουν τα Properties Name & Phone.

    Αν η λύση είναι βάζωντας τις τιμές κάθε φορά στο construct της νέας φόρμας θεωρώ
    ότι απατείται περισότερη δουλεία διότι θα μπορούσα απλά αντι να φτιάξω μια κλάση του πελάτη να ορίσω τα properties Name και Phone στην φόρμα Α και μετά στην φόρμα Β να λέω το παρακάτω όταν ο χρήστης θέλει να χρησιμοποιήσει τα δεδομένα.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class Form1
    
    private _Name as string
    Public Property Name as string
    Get return _Name
    Set(byval value as string)
    _Name = value
    End Property
    
    End Class

    Kαι στην φόρμα Βα να πω πολύ απλά

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class Form2
    
    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
    
       Dim sname as string = form1.Name
       msgbox(sname)
    
    End Sub
    
    End Class

    Δηλαδή με λίγα λόγια να χρησιμοποιήσω το property που έχω ορίσει στην Φόρμα Α εφόσον είναι Public και να μην φτιάξω με γενική Κλάση που θα ορίζει τον πελάτη μου με όλα τα Properties του τα Methods Κλπ κλπ.

    Mε αυτή την λογική όμως δεν μπορώ να έχω τον πελάτη μου σε μια κλάση και κάθε φορά θα πρέπει να γράφω properties ξανά και ξάνα όταν θέλω να κάνω κάποιες αλλαγές μέσα στην εφαρμογή.

     

     

  •  29-10-2009, 13:46 54807 σε απάντηση της 54805

    Απ: Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

    Ναι, η αλήθεια είναι ότι μπερδεύτηκα λίγο, ωστόσο βάσει της διευκρίνησης, καταλαβαίνω ότι θες το ανάποδο από αυτό που σου έγραψα. Ουσιασικά, η επικοινωνία μεταξύ των φορμών γίνεται μέσω των properties. Η form1 που έχει τη λίστα των πελατών θα πρέπει να έχει ένα property που θα αντιπροσωπεύει τον επιλεγμένο πελάτη και η form2 θα διαβάζει αυτό το property για να πάρει τον επιλεγμένο πελάτη. Από εκεί και πέρα, μπορεί να έχει πρόσβαση σε οποιοδήποτε property χρειαστεί. Δεν είναι ανάγκη δηλαδή στην form1 να φτιάξεις τόσα properties, όσα και τα properties της κλάσης Client, θα έχει ένα property τύπου Client στο οποίο θα περνάς ολόκληρο το object.

     


    Vir prudens non contra ventum mingit
  •  29-10-2009, 13:55 54808 σε απάντηση της 54807

    Απ: Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

    ώπα κάτσε...

    Δηλαδή λές οτι θα γεμίζω μια φορά ολα τα properties στην φόρμα Α και μετά θα φτιάχνω ενα ενιαιο ας πούμε property που θα κουβαλάει όλη την κλάση Client με γεμάτα τa properties με τιμές.
    Αν λές αυτό μπορείς σε παρακαλώ να μου δείξεις ενα παραδειγματάκι με κώδικα διότι έχω ζαλιστεί.

    Ευχαριστώ.

  •  29-10-2009, 14:01 54809 σε απάντηση της 54808

    Απ: Μεταφορά δεδομένων απο μια Κλάση σε μια άλλη

    Ναι ακριβώς αυτό λέω. Επειδή θα είμαι off-line από τώρα μέχρι το απόγευμα, ρίξε μια ματιά στο παράδειγμα στην αρχική μου απάντηση, είναι σχεδόν το ίδιο πράγμα. Αν δεν έχεις βγάλει άκρη μέχρι το απόγευμα, θα ξαναδούμε τον κώδικα.


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems