Tipp-Upload: VB.NET 0288: IExtenderProvider - "virtuelle" Properties an bestehende Komponenten "patchen"
von Spatzenkanonier
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Sonstiges
- Sprachmerkmale
- Steuerelemente
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
IExtenderProvider
Der Vorschlag wurde erstellt am: 05.07.2008 22:25.
Die letzte Aktualisierung erfolgte am 11.01.2009 12:40.
Beschreibung
Im Beispiel kann allen Controls und ToolstripItems im Designer ein Sicherheitslevel zugeordnet werden.
Wird das Form von einem User mit niedrigerer Zugriffsberechtigung geöffnet, werden alle Elemente mit höherem Sicherheitslevel vor ihm verborgen.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' --------- Anfang Projektgruppe SecurityLevels.sln --------- ' -------- Anfang Projektdatei SecurityLevels.vbproj -------- ' ----------------- Anfang Datei frmMain.vb ----------------- ' IDE-Voreinstellungen: ' Option Strict On ' Option Explicit On ' Option Infer On ' Projekt-Voreinstellungen ' Imports System ' Imports System.Windows.Forms ' Imports System.Collections.Generic ' Imports System.Linq Public Class frmMain Private _SecurLevels As FormSecurity.Permission() = DirectCast([Enum].GetValues(GetType( _ FormSecurity.Permission)), FormSecurity.Permission()) Private Sub frmMain_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load Me.lstSecurityLevel.DataSource = _SecurLevels End Sub Private Sub btOpenRestricted_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles btOpenRestricted.Click Dim Frm As New frmRestricted Frm.FormSecurity1.ApplyPermission(_SecurLevels(Me.lstSecurityLevel.SelectedIndex)) Frm.Show() End Sub End Class ' ------------------ Ende Datei frmMain.vb ------------------ ' -------------- Anfang Datei frmRestricted.vb -------------- Public Class frmRestricted ' Da es nur um die Anzeige geht, befindet sich hier keine Funktionalität End Class ' --------------- Ende Datei frmRestricted.vb --------------- ' --------------- Anfang Datei FormSecurity.vb --------------- Imports System.ComponentModel ' Das Attribut weist den Designer an, für alle Komponenten die virtuelle Property ' "Permission on FormSecurity1" anzuzeigen. Die pro Komponente darzustellenden Werte werden ' mit den Methoden "GetPermission" und "SetPermission" verwaltet. ' Dieses tut der Designer nur mit Komponenten, die die in "CanExtend" festgelegten ' Bedingungen erfüllen <ProvideProperty("Permission", GetType(Component))> Public Class FormSecurity Inherits Component Implements IExtenderProvider Private _Assignments As New Dictionary(Of Component, Permission) Public Enum Permission [Default] Esoteric Medicinic Financial Diplomatic CIA End Enum ' Dieser Interface-Member wird zur Designzeit aufgerufen, und zwar für alle auf dem Form ' befindlichen Komponenten. Er checkt, ob der Designer die Pseudo-Property anzeigen ' soll. Public Function CanExtend(ByVal extendee As Object) As Boolean _ Implements IExtenderProvider.CanExtend Dim Ctl = TryCast(extendee, Control) ' Controls extenden If Ctl Is Nothing Then Return TypeOf extendee Is ToolStripItem ' oder ToolStripItems ' der .Site.Container-Test schließt z.B. Splitcontainer-Panel aus Return Ctl.Site.Container Is Me.Site.Container End Function <DefaultValue(GetType(Permission), "Default")> _ <Category("Behavior")> _ Public Function GetPermission(ByVal target As Component) As Permission If _Assignments.TryGetValue(target, GetPermission) Then Exit Function Return Permission.Default End Function <DefaultValue(GetType(Permission), "Default")> _ <Category("Behaviour")> _ Public Sub SetPermission(ByVal target As Component, ByVal value As Permission) _Assignments(target) = value End Sub Public Sub ApplyPermission(ByVal Permission As Permission) ' Alle Controls/ToolstripItems verstecken, deren Permission zu hoch ist. For Each Entry In _Assignments If Entry.Value > Permission Then If TypeOf Entry.Key Is Control Then DirectCast(Entry.Key, Control).Visible = False Else DirectCast(Entry.Key, ToolStripItem).Visible = False End If End If Next End Sub End Class ' ---------------- Ende Datei FormSecurity.vb ---------------- ' --------- Ende Projektdatei SecurityLevels.vbproj --------- ' ---------- Ende Projektgruppe SecurityLevels.sln ----------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.