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

 

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

Βοήθεια με Arguements

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 09-09-2011, 16:46. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-09-2011, 14:49 67168

    Βοήθεια με Arguements

    Καλησπέρα παιδιά,

    Έχω ένα πρόβλημα.. θέλω να καλέσω απο ένα κουμπί το "Private Sub frmMain_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load"

    Ωστόσο όταν το καλώ πρέπει να βάλω κάτι για το "Sender" και το "e" αλλιώς μου λέει οτι δεν έβαλα τα Arguements (προφανώς)

    Δεν παίζουν κανένα ρόλο όμως αυτά τα Arguements μέσα στο sub.. οπότε οτιδήποτε κι αν βάλω με καλύπτει.. πείτε καμιά ιδέα..


    Θα μπορούσα βέβαια να αλλάξω το "Private Sub frmMain_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load"

    σε " Private Sub frmMain_Load() Handles MyBase.Load" 


    Αλλά δεν θέλω γιατί κάποια στιγμή μπορεί να χρειαστώ τα Arguements σε κάνα error handle η τπτ.. οπότε τι να βάλω προς το παρόν σαν arguements για να μπορώ να καλέσω το sub?


  •  09-09-2011, 15:02 67169 σε απάντηση της 67168

    Απ: Βοήθεια με Arguements

    Η εντολή frmMain.show() στον κώδικα του κουμπίου αρκεί για να εκτελεστεί το event load της φόρμας frmMain.
  •  09-09-2011, 15:15 67171 σε απάντηση της 67169

    Απ: Βοήθεια με Arguements

    Το ξέρω αυτό :Ρ


    Όταν είπα οτι "θέλω να την καλέσω απο ένα κουμπί" εννοούσα απο ένα κουμπί πχ το btnRefresh θέλω να καλέσω το frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)


    με άλλα λόγια θέλω να γράψω:

        Private Sub btnRefresh_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnRefresh.Click
            call frmMain_Load({sender}, {e})
        End Sub

    όπου
    {sender}, {e} είναι τα arguements που ψάχνω να βάλω για να μην μου λέει οτι λείπουν.
    Οπότε.. καμιά ιδέα??


  •  09-09-2011, 15:48 67173 σε απάντηση της 67171

    Απ: Βοήθεια με Arguements

    Καταρχήν, ΜΗΝ το κάνεις αυτό. Η frmMain_Load είναι για να χειρίζεται το Load event της φόρμας, όχι για να καλείται από τον κώδικα σου. Αν έχεις κάποιο κώδικα εκεί μέσα που θέλεις να καλέσεις και από άλλο σημείο, βγάλτον σε ένα ξεχωριστό sub και κάλεσε το.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-09-2011, 16:01 67175 σε απάντηση της 67173

    Απ: Βοήθεια με Arguements

    Μα θέλω να ξαναγίνονται όλα όσα υπάρχουν μέσα εκεί..

    Να βγάλω τα πάντα σε ξεχωριστώ sub και στο me.load να καλώ το άλλο sub??

    ποιά η λογική πίσω απο το να μην καλώ το _load της φόρμας απο αλλού?


  •  09-09-2011, 16:24 67177 σε απάντηση της 67175

    Απ: Βοήθεια με Arguements

    Η Load έχει μία πολύ συγκεκριμένη χρήση την οποία προσπαθείς να παραβιάσεις. Το ότι έχεις πρόβλημα με τα arguments που σου ζητάει είναι μία πολύ σημαντική ένδειξη ότι έχεις πρόβλημα. Αυτό δεν θα λυθεί δίνοντας dummy arguments αλλά βγάζοντας τον κώδικα από αυτό το ακατάλληλο σημείο.

    Για σκέψου τί θα συμβεί αν σε κάποια φάση σου χρειαστούν τα arguments στο Load. Ο κώδικας που τα χρησιμοποιεί θα "σκάσει" αν δώσεις τα dummy arguments, εκτός και αν πας να πειράξεις ΚΑΙ την Refresh για να δώσεις διαφορετικά arguments. Και αν κάποια στιγμή την καλείς από κάπου αλλού, θα έχεις ΑΛΛΟ ένα σημείο που θα απαιτεί διόρθωση.

    Δεν είναι κακό να σπας τον κώδικα σου σε πολλά sub. Ίσα -ίσα, είναι πολύ καλή σχεδίαση ο κώδικας να είναι δομημένος σε subs τα οποία έχουν συγκεκριμμένη χρήση. Αντίστοιχα, κώδικας ο οποίος προσπαθεί να κάνει πολλά πράγματα μαζί, είναι δείγμα σοβαρού προβλήματος. Όσο μεγαλύτερο είναι ένα sub, τόσο δυσκολότερο είναι να καταλάβεις τί κάνει και τόσο πιθανότερο πράγματα που κάνεις σε ένα σημείο να επηρεάσουν ένα άλλο.

    Εξάλλου, δεν είναι καθόλου δύσκολο να βγάλεις τον κώδικα σε ξεχωριστό sub. Η C# έχει έτοιμο τo Extract Method refactoring αλλά και για την VB μπορείς να κατεβάσεις κάποιο δωρεάν addin όπως το CodeRush Xpress, με τα οποία απλά επιλέγεις τον κώδικα που θέλεις να βγάλεις σε ξεχωριστή μέθοδο, πατάς δεξί κλικ και από το μενού διαλέγεις το Extract Method.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-09-2011, 16:37 67178 σε απάντηση της 67177

    Απ: Βοήθεια με Arguements

    Δεν χρειάζομαι πρόγραμμα να μου το κάνει, δεν είναι κάτι δύσκολο, απλώς μου φαίνεται περίεργο.

    Συμφωνώ ότι είναι καλό να σπάει ο κώδικας σε subs/functions, δεν λέω το αντίθετο.. απλώς επειδή χρειάζομαι όλα όσα έχει μέσα το _load θα πρέπει να πάρω τα πάντα και να τα βάλω σε ένα sub.

    Οπότε μετά μέσα στο _load το μόνο που θα έχει θα είναι το Call InitializationMain()

    και μου κάνει κάπως περίεργο.. :Ρ


    Όπως και ναχει, έχεις δίκιο σε αυτό που είπες, το καταλαβαίνω τώρα οπότε θα κάνω αυτό που με συμβούλεψες.


    Σε ευχαριστώ πολύ Παναγιώτη !


  •  09-09-2011, 16:46 67180 σε απάντηση της 67178

    Απ: Βοήθεια με Arguements

    Και σου φαίνεται λιγότερο περίεργο να καλείς ένα event handler με άσχετο όνομα, στον οποίο θα περάσεις άσχετα arguments?????

    Εξάλλου, τη λογική του να ξεχωρίζεις διαφορετικό functionality σε διαφορετικές μεθόδους τη βλέπεις σε κάθε φόρμα που φτιάχνεις, όταν βλέπεις αυτή την κλήση στο InitializeComponents() που μπαίνει αυτόματα στον constructor.

    Τέλος, καλύτερα να δώσεις ένα περιγραφικό όνομα στη νέα μέθοδο αντί για InitializationMain(). Από την στιγμή που μπορεί να κληθεί από διαφορετικά σημεία, μάλλον δεν κάνει μόνο Initialization. Επίσης, αυτό το Call και περιττό και περίεργο είναι. Έχει ξεμείνει από την VB 3 και δεν είναι απαραίτητη, δεν προσφέρει τίποτε, ούτε κάνει πιο ευανάγνωστο τον κώδικα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems