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

 

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

Reflection σε design-time για υλοποίηση combobox design-time property σε user control

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος cap στις 10-05-2006, 10:32. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-05-2006, 12:13 12324

    Reflection σε design-time για υλοποίηση combobox design-time property σε user control

    Αν και ο τίτλος μπορεί να φαίνεται λίγο περίεργος, αυτό που θέλω να κάνω είναι σχετικά απλό.

    Παλιότερα λοιπόν είχα γράψει στο blog μου ένα αρθράκι (για τη δημιουργία του οποίου πάλι είχα σημαντική βοήθεια από τα μέλη της κοινότητας εδώ), σχετικά με τη Δημιουργία design-time combo-style String property για user control. Ουσιαστικά, δηλαδή, για το πώς φτιάχνουμε το δικό μας typeconverter για να δώσουμε σε ένα user-control string properties με προκαθορισμένες τιμές που θα επιλέγονται από combo box στο property grid τους σε design-time.

    Προέκυψε η ανάγκη να επεκτεινω αυτό το concept, δεν είμαι όμως σίγουρος πως αυτό που θέλω να κάνω μπορεί με κάποιον τρόπο να υλοποιηθεί. Θέλω λοιπόν να τραβήξω reflection σε DESIGN TIME στο Assembly που θα εκτελεστεί, ώστε να "γεμίσω" αυτό το design-time property με τα ονόματα κλάσεων που κληρονομούν από κάποιον συγκεκριμένο τύπο και βρίσκονται στο Assembly μου.

    Το θέμα γίνεται ακόμα δυσκολότερο, γιατί το control που θα περιέχει το property αυτό ΔΕΝ βρίσκεται στο Assembly που θα εκτελεστεί αλλά σε ένα άλλο assembly.
    Ενας ακόμα παράγοντας δυσκολίας είναι οτι ΔΕΝ θέλω να έχω hardcoded το όνομα του Assembly από το οποίο θα τραβήξω τα ονόματα. Θέλω πάντα να είναι αυτό που θα εκτελεστεί, χωρίς όμως να γνωρίζω εκ των προτέρων ποιό θα είναι. Αυτό γιατί το control έχει μπει σε μια ξεχωριστή library η οποία γίνεται πάντα reference από το εκτελούμενο assembly.

    Εκείνη την ώρα δεν έχω ExecutingAssembly (ειμαι σε design time - και μάλιστα τρώω ένα ΦΟΒΕΡΟ crash αν επιχειρήσω να το χρησιμοποιήσω), το CallingAssembly μου φαίνεται να ειναι το System.Windows.Forms.Form και το EntryAssembly μου πάλι δεν παίζει.

    Η ερώτηση λοιπόν είναι: Γινεται, ή να εγκαταλείψω την προσπάθεια; Πως μπορεί σε design-time κάποιος να επιχειρήσει να κάνει reflection στο startup assembly (αυτό που αντιστοιχεί στο startup project του solution του) και να πάρει types, χωρίς να έχει hardcoded ονομα; (Εννοείται οτι το assembly έχει γίνει compile). Μήπως το reflection δεν είναι ο σωστός τρόπος (πολυ το φοβαμαι αυτό!)

     

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  05-05-2006, 13:19 12327 σε απάντηση της 12324

    Απ: Reflection σε design-time για υλοποίηση combobox design-time property σε user control

    Ως γνωστόν, όταν κάνεις design μια φόρμα, ο designer του Visual Studio δημιουργεί ένα instance της base class σου (που εδώ είναι η System.Windows.Forms.Form) και το εμφανίζει στο design area για να το πειράξεις. Έτσι λοιπόν ότι όταν καλέσεις από το control την 

    this.FindForm().GetType().Assembly

    σου φαίνεται να είναι η System.Windows.Forms για αυτό το λόγο.

    Αν όμως φτιάξεις μια κλάση η οποία βρίσκεται στην assembly περί ης ο λόγος, η οποία κληρονομεί από την System.Windows.Forms.Form χωρίς να κάνει τίποτα άλλο απολύτως, και βάλεις base class της φόρμας σου αυτή την κλάση, τότε η this.FindForm().GetType().Assembly του control σε design time θα σου δώσει τη δική σου assembly.

     


    Νατάσα Μανουσοπούλου
  •  10-05-2006, 10:32 12488 σε απάντηση της 12327

    Απ: Reflection σε design-time για υλοποίηση combobox design-time property σε user control

    Αργησα λιγάκι να το δω. Θα το δοκιμάσω, και θα απαντήσω. Ευχαριστω!
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

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