vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
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:  18.445 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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 18.445 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-2024 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