Benutzer mit den meisten Antworten
Fenster und Kontrollen eines Projektes in eine Datenbank schreiben

Frage
-
Hi,
ist es möglich, zur Laufzeit den Namen aller Forms und deren Controls, die im Projekt enthalten sind, zu ermitteln und in eine Datenbank zu schreiben? Ich hoffe, ihr wißt, was ich meine...
Lieben Gruß
Marcus
Der erste Tag, an dem ich nichts Neues lerne, wird der Tag sein, an dem sich der Deckel über mir schließt...
Antworten
-
Hallo Marcus,
anbei mal ein Beispiel zum Auflisten aller Formulare im aufrufenden Assembly und deren Steuerelemente. Hierarchisch in einem TreeView visualisiert. Statt TreeView käme an der Stelle Deine Ausgabe in eine Datenbank:
Imports System.Reflection Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles Button1.Click EnumForms() End Sub Private Sub EnumForms() For Each lType As Type In Assembly.GetCallingAssembly().GetTypes() If lType.IsSubclassOf(GetType(Form)) Then Using lFrm As Control = DirectCast(Activator.CreateInstance(lType), Control) EnumControls(lFrm, TreeView1.Nodes) End Using End If Next End Sub Private Sub EnumControls(ByVal parent As Control, ByVal nodes As TreeNodeCollection) Dim lRoot As New TreeNode(String.Format("{0} ({1})", parent.Name, parent.GetType.Name())) For Each lCtl In parent.Controls EnumControls(lCtl, lRoot.Nodes) Next nodes.Add(lRoot) End Sub End Class
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert mjanz Freitag, 13. Mai 2011 05:37
Alle Antworten
-
Hallo Thorsten,
wahrscheinlich mache ich es mir echt schwer, aber ich habe da so eine Rechteverwaltung angefangen. Dabei ist es so, dass ich eine RollenID habe, die am Benutzer hängt. In einer Tabelle stehen die RollenID, der Name einer Form, der Name einer Control und ob die Control (und damit die entsprechende Funktion...) erreichbar sein soll oder nicht. Diese Verwaltung läuft wie geschnitten Börek und ich nutze sie bei allen Fenstern im Projekt. Bisher pflege ich diese Rechte-Tabelle vom Management-Studio aus. Ich möchte aber in meiner Software eine Konfiguration zur Verfügung stellen, so dass man aus der Software heraus Berechtigungsgruppen (Rollen) erstellen kann und dann diesen Gruppen Funktionen zur Verfügung stellt oder eben nicht... Da ich diese Verwaltung in mehreren Projekten einsetzen muss/möchte, möchte ich die Rechte-Tabelle nicht immer mühsam von Hand pflegen müssen. Alle vorhandenen Forms und deren Controls sollen sich quasi von selbst in die Tabelle eintragen, wenn ich eine neue Rolle anlege... Solltest Du eine einfachere Lösung haben, bin ich natürlich für jeden Tipp dankbar...! Danke im Voraus für Deine Hilfe!Gruß
Marcus
Der erste Tag, an dem ich nichts Neues lerne, wird der Tag sein, an dem sich der Deckel über mir schließt... -
Hallo Marcus,
anbei mal ein Beispiel zum Auflisten aller Formulare im aufrufenden Assembly und deren Steuerelemente. Hierarchisch in einem TreeView visualisiert. Statt TreeView käme an der Stelle Deine Ausgabe in eine Datenbank:
Imports System.Reflection Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles Button1.Click EnumForms() End Sub Private Sub EnumForms() For Each lType As Type In Assembly.GetCallingAssembly().GetTypes() If lType.IsSubclassOf(GetType(Form)) Then Using lFrm As Control = DirectCast(Activator.CreateInstance(lType), Control) EnumControls(lFrm, TreeView1.Nodes) End Using End If Next End Sub Private Sub EnumControls(ByVal parent As Control, ByVal nodes As TreeNodeCollection) Dim lRoot As New TreeNode(String.Format("{0} ({1})", parent.Name, parent.GetType.Name())) For Each lCtl In parent.Controls EnumControls(lCtl, lRoot.Nodes) Next nodes.Add(lRoot) End Sub End Class
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert mjanz Freitag, 13. Mai 2011 05:37