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

Δημιουργία design-time combo-style String property για user control

Εψαχνα αρκετές ημέρες, λόγω της μικρής μου εξοικείωσης με το design-time των user controls σε Windows Forms, για να καταλάβω πώς γίνεται να δημιουργήσουμε ένα string property το οποίο να φαίνεται μεν στον designer, αλλά να σου δίνει μια συγκεκριμένη λίστα επιλογών (ενα combo δηλαδή) για να διαλέξεις.

Γενικά, αν χρησιμοποιήσουμε κάποιο enumeration, το πράγμα κυλάει μόνο του. Αν όμως έχουμε String property και θέλουμε να επιλέξουμε μεταξύ συγκεκριμένων Strings, τότε το πρόβλημά μας ανάγεται στο πρόβλημα που θα αντιμετωπίζαμε χρησιμοποιώντας οποιοδήποτε άλλο Object ως property του user control μας.

Ητοι, για να δείξουμε μια combobox-style επιλογή σε design time για το συγκεκριμένο property του user control, χρειαζόμαστε ένα custom type converter.

Θα δουμε παρακάτω πώς γίνεται αυτό. Καταρχήν χρειαζόμαστε μια νέα κλάση:

Class MyListConverter
    Inherits System.ComponentModel.StringConverter

    'Εδώ φορτώνουμε τις τιμές μας.
    Public Overloads Overrides Function GetStandardValues( _
        ByVal context As System.ComponentModel.ITypeDescriptorContext) _
        As System.ComponentModel.TypeConverter.StandardValuesCollection

        Dim C As Collection = New Collection

        C.Add("Option 1")
        C.Add("Option 2")
        C.Add("Option 3")
        Return New StandardValuesCollection(C)

    End Function

    'Εδώ μπορούμε να κάνουμε return True αν θέλουμε να επιλέγουμε μόνο από τις προκαθορισμένες τιμές 
    'ή False αν θέλουμε να μπορούμε να γράψουμε και δικές μας τιμές.
    Public Overloads Overrides Function GetStandardValuesExclusive( _
        ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
        Return False
    End Function

    Public Overloads Overrides Function GetStandardValuesSupported( _
         ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
        Return True
    End Function

End Class

Τώρα που έχουμε το δικό μας Type Converter, πρέπει να τον "δέσουμε" με μια property του control Ας δούμε πώς:

    <System.ComponentModel.TypeConverter(GetType(MyListConverter))> _
    Public Property MyProperty() As Object
        Get
            Return (_myPrivateVariable)
        End Get
        Set(ByVal Value As Object)
            _myPrivateVariable = Value
        End Set
    End Property

Απλά δηλαδή σε ένα τυπικό Property definition προσθέτουμε το attribute που βλέπετε από πάνω. Το type που θέλουμε είναι το type της κλάσης που μόλις φτιάξαμε (MyListConverter). Το Property πρέπει να είναι οπωσδήποτε τύπου Object (πράγμα που δεν μας ενοχλεί, μια και τα Strings είναι objects), ενώ η _myPrivateVariable είναι και αυτή τύπου Οbject και αποτελεί την property backer variable μας.

 

Έχουν δημοσιευτεί Τετάρτη, 14 Δεκεμβρίου 2005 2:37 μμ από το μέλος cap
Δημοσίευση στην κατηγορία:

Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
απαιτούμενο
(απαιτούμενο)
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image