vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Sch?tzen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Controls   |   VB-Versionen: VB.NET23.07.07
Control Properties, UITypeEditor

Verschiedene Arten Properties eines Controls anzuzeigen

Autor:   Christian SchleinkoferBewertung:     [ Jetzt bewerten ]Views:  10.728 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Viele haben sich sicher schon gefragt, wie man Properties (Eigenschaften) eines UserControls im PropertyGrid (Eigenschaftenfenster) von VB.NET anzeigen kann. Im Netz sind viele Beispiele, die aber entweder nur den einfachen Weg für Standardproperties zeigen oder aber sehr komplex sind. Stichwort UITypeEditor.

    Mit diesem Tipp will ich 4 verschiedene Arten zeigen, wie man auf einfachem Weg Properties eines Controls nach außen führen kann.

    1. Standarproperty
    2. Listenansicht (Auflistung)
    3. Eigenes Control in einem DropDown Menü
    4. Anzeige eines Formulars zum eintragen komplexer Werte

    Wir erstellen uns erst einmal ein Benutzersteuerelement namens ctlProperties.
    Im oberen Teil des Codes (oberhalb von Public Class [Controlname]) fügen wir folgende Zeilen ein, damit wir uns später ein wenig Tipparbeit sparen.

    Option Strict On
    Option Explicit On
     
    Imports System
    Imports System.ComponentModel
    Imports System.ComponentModel.Design
    Imports System.Drawing
    Imports System.Drawing.Drawing2D
    Imports System.Drawing.Design
    Imports System.Windows.Forms
    Imports System.Diagnostics
    Imports System.Windows.Forms.ComponentModel
    Imports System.Windows.Forms.Design
     
    Public Class ctlProperties

    Der ganze nachfolgende Code muss innerhalb der Klasse des Steuerelements.

    1. Fangen wir mal mit dem einfachsten an, dem Standardproperty

      ' 1. Standard Property
      ' Eine Variable, die einen String aufnehmen kann.
      Private mPropertyOne As String = ""
     
      ' Unser Property. Liest den Wert aus und speichert ihn wieder.
      Public Property PropertyOne() As String
        Get
          Return mPropertyOne
        End Get
        Set(ByVal value As String)
          mPropertyOne = value
        End Set
      End Property

    2. Nun wollen wir mal schauen was notwendig ist, um eine Property Listenauswahl zu machen.
    Auch das ist noch nicht schwierig.

      ' 2. Property Auswahlliste
      ' Das sind später die Einträge, die zur Auswahl stehen.
      Public Enum EPropertyTwo
        EntryOne
        EntryTwo
        EntryThree
        EntryFour
      End Enum
     
      ' Wieder eine neue Variable, die die Werte der zuvor 
      ' angelegten Liste aufnehmen kann.
      Private mPropertyTwo As EPropertyTwo
     
      ' Und hier wieder unser Property, das nach außen geführt 
      ' wird, Einträge speichert, liest und anzeigt.
      Public Property PropertyTwo() As EPropertyTwo
        Get
          Return mPropertyTwo
        End Get
        Set(ByVal value As EPropertyTwo)
          mPropertyTwo = value
        End Set
      End Property

    Ich denke mal das auch das noch nicht schwierig war.
    Kommen wir nun zu Punkt 3, dem einbinden eines USerControls, das in einer DropDown Liste aufgeklappt werden kann. Hier in diesem Beispiel ist es eine CheckedListBox.

      ' 3. Eigenes Steuerelement beim Ausklappen anzeigen
      ' Zuerstmal brauchen wir eine Klasse, die von UITypeEditor 
      ' ableitet. Dort überschreiben wir die Methoden 
      ' GetEditStyle und EditValue
      Public Class CPropertyThree
        Inherits UITypeEditor
     
        ' Wird gebraucht um das Steuerelement dann azuzeigen.
        Private edSvc As IWindowsFormsEditorService
     
        ' CheckedListbox, die dann im Dropdown auftauchen soll.
        Dim lstConditions As CheckedListBox
     
        Public Overrides Function GetEditStyle( _
          ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle
     
          ' Überprüfung auf das vorhandensein und Rückgabe des Stils, was 
          ' angezeigt werden soll. In diesem Fall ein DropDown
          If Not context Is Nothing AndAlso Not context.Instance Is Nothing Then
            Return UITypeEditorEditStyle.DropDown
          End If
          ' Ist nichts vorhanden ,dann machen wir an dieser Stelle nichts.
          Return UITypeEditorEditStyle.None
        End Function
     
        Public Overrides Function EditValue( _
          ByVal context As ITypeDescriptorContext, _
          ByVal provider As System.IServiceProvider, _
          ByVal value As [Object]) As [Object]
     
          If (Not (context Is Nothing) And _
            Not (context.Instance Is Nothing) And _
            Not (provider Is Nothing)) Then
     
            Dim nIdx As Integer
            Dim nIdx2 As Integer
            Dim nIdx3 As Integer
     
            ' Überprüfung ob schon eine Kopie der CheckedListbox da ist.
            If lstConditions Is Nothing Then
              ' Wenn nein, dann neue Kopie erzeugen.
              lstConditions = New CheckedListBox
              ' Setzen verschiedener Werte für die Anzeige.
              lstConditions.Height = 125
              lstConditions.ThreeDCheckBoxes = False
              lstConditions.CheckOnClick = True
              lstConditions.BackColor = Color.GhostWhite
     
              lstConditions.Items.Add("A")
              lstConditions.Items.Add("B")
              lstConditions.Items.Add("C")
              lstConditions.Items.Add("D")
              lstConditions.Items.Add("E")
              lstConditions.Items.Add("F")
              lstConditions.Items.Add("G")
            End If
     
            ' Value ist der Wert, der im PropertyGrid angezeigt wird. 
            ' Wenn dieser Nothing ist dann auf Leerstring setzen.
            If value Is Nothing Then value = ""
     
            ' durchgehen des Strings und markieren der Einträge 
            ' in der CheckedListBox
            For nIdx = 0 To value.ToString.Length - 1
              nIdx2 = lstConditions.FindStringExact( _
                value.ToString.Substring(nIdx, 1))
              lstConditions.SetItemChecked(nIdx2, True)
            Next
     
            edSvc = CType(provider.GetService( _
              GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)
            If Not (edSvc Is Nothing) Then
              ' Hinzufügen der CheckedListBox zum DropDown
              edSvc.DropDownControl(lstConditions)
            End If
     
            Dim sDisplayConditions As String = ""
            With lstConditions
              For nIdx3 = 0 To .CheckedItems.Count - 1
                ' Aus den ausgewählten Einträgen einen String basteln.
                sDisplayConditions += .CheckedItems.Item(nIdx3).ToString
              Next
            End With
            ' Den String zurück geben.
            Return sDisplayConditions
          End If
        End Function
      End Class
     
      ' Variable als String für Aufnahme des 
      ' Wertes aus der Klasse
      Private mPropertyThree As String = ""
     
      ' Editor = Angabe der Klasse und UITypeEditor. 
      ' Damit weiß er das er die Klasse nehmen soll.
      <System.ComponentModel.Editor(GetType(CPropertyThree), _
      GetType(System.Drawing.Design.UITypeEditor))> _
      Public Property PropertyThree() As String
        ' Wieder ein normales Property zum anzeigen des Wertes.
        Get
          Return mPropertyThree
        End Get
        Set(ByVal value As String)
          mPropertyThree = value
        End Set
      End Property

    So, das wäre geschafft; dann mal ab zum letzen Teil, und dieser ist sogar noch leichter als Teil 3.

    4. Anzeige eines Formulars zum eintragen komplexer Werte

      ' 4 Eigenes Formular anzeigen um Werte einzutragen
      ' Wieder eine Klasse, deren Methoden wir überschreiben.
      Public Class CPropertyFour
        Inherits UITypeEditor
     
        Public Overrides Function GetEditStyle( _
          ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle
          If Not context Is Nothing AndAlso Not context.Instance Is Nothing Then
            ' Genau wie 3. Beispiel nur angabe von Stil Modal
            Return UITypeEditorEditStyle.Modal
          End If
          Return UITypeEditorEditStyle.None
        End Function
     
        Public Overrides Function EditValue( _
          ByVal context As ITypeDescriptorContext, _
          ByVal provider As System.IServiceProvider, _
          ByVal value As [Object]) As [Object]
     
          ' hier drin aufruf des Formulars und Rückgabe des Wertes.
          Dim frmAnzeige As New OpenFileDialog
          If frmAnzeige.ShowDialog = DialogResult.OK Then
            Return frmAnzeige.FileName
          End If
        End Function
      End Class
     
      ' String, der die Auswahl aufnehmen kann.
      Private mPropertyFour As String
     
      <Editor(GetType(CPropertyFour), GetType(UITypeEditor))> _
    Public Property PropertyFour() As String
        ' Angabe des Editors wie in Beispiel 3
        ' Property für den Wert.
        Get
          Return mPropertyFour
        End Get
        Set(ByVal value As String)
          mPropertyFour = value
        End Set
      End Property
    End Class

    Das wars auch schon. Ich hoffe, dass ich durch diesen Tipp mal ein bisschen einen Einblick in das Geschehen geben konnte. Wenn noch Fragen sind dann gerne im Forum oder über meine E-Mail Adresse
     

    Dieser Tipp wurde bereits 10.728 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Aktuelle Diskussion anzeigen (1 Beitrag)

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
    (einschl. Beispielprojekt!)

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel