|
|
Imports C1.Win.C1TrueDBGrid
|
|
|
Imports System
|
|
|
Imports System.Data
|
|
|
Imports System.Data.SqlTypes
|
|
|
Imports System.Data.SqlClient
|
|
|
|
|
|
''' <summary>
|
|
|
''' Formular-Security-Objekte auslesen und auf DB schreiben bzw. Formular-Security zur Laufzeit setzen
|
|
|
''' </summary>
|
|
|
''' <remarks></remarks>
|
|
|
|
|
|
Public Class MySecurityx
|
|
|
Dim m_connectionstring As String
|
|
|
Property Connectionstring As String
|
|
|
Get
|
|
|
Return m_connectionstring
|
|
|
|
|
|
End Get
|
|
|
Set(value As String)
|
|
|
m_connectionstring = value
|
|
|
End Set
|
|
|
End Property
|
|
|
Dim SecurityData As DataSet = Globals.SecurityDaten
|
|
|
Dim connection As New SqlConnection()
|
|
|
Dim da As New SqlDataAdapter("", connection)
|
|
|
|
|
|
Dim IntForm As Object
|
|
|
Dim ctlcol As New Collection
|
|
|
Dim formname As String = ""
|
|
|
|
|
|
|
|
|
Public Sub Reset_Mainmenu(ByRef f As Form)
|
|
|
IntForm = f
|
|
|
formname = f.Name
|
|
|
'Load form DB
|
|
|
Load_Data(f.Name)
|
|
|
'Load FormObjects
|
|
|
Me.ctlcol.Clear()
|
|
|
formname = f.Name
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Dim typ As System.Type = ctl.GetType
|
|
|
If LCase(typ.Name) = "menustrip" Then
|
|
|
Dim tmpmnu As MenuStrip = ctl
|
|
|
level = 0
|
|
|
For Each xx As Object In tmpmnu.Items
|
|
|
Dim objtype As System.Type = xx.GetType
|
|
|
If LCase(objtype.Name) = "toolstripmenuitem" Then
|
|
|
Dim tsm As ToolStripMenuItem = xx
|
|
|
tsm.Visible = True
|
|
|
tsm.Enabled = True
|
|
|
For Each subobj As Object In xx.DropDownItems
|
|
|
If LCase(subobj.GetType.Name) = "toolstripmenuitem" Then
|
|
|
Dim tsm1 As ToolStripMenuItem = subobj
|
|
|
tsm1.Enabled = True
|
|
|
tsm1.Visible = True
|
|
|
End If
|
|
|
Next
|
|
|
End If
|
|
|
Next
|
|
|
End If
|
|
|
Next
|
|
|
End Sub
|
|
|
|
|
|
''' <summary>
|
|
|
''' Formularsecurity setzen
|
|
|
''' </summary>
|
|
|
''' <param name="f">Aktuelles Formular</param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
Public Function Set_Form_Security(ByRef f As Form)
|
|
|
IntForm = f
|
|
|
formname = f.Name
|
|
|
'Load form DB
|
|
|
Load_Data(f.Name)
|
|
|
'Load FormObjects
|
|
|
Me.ctlcol.Clear()
|
|
|
formname = f.Name
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
' AddHandler ctl.HelpRequested, AddressOf Object_MouseDown
|
|
|
'ctl.ContextMenuStrip = Globals.TTContextMenuStrip
|
|
|
'AddHandler ctl.KeyDown, AddressOf Object_MouseDown
|
|
|
Next
|
|
|
Set_Security()
|
|
|
|
|
|
End Function
|
|
|
|
|
|
Public Function Set_Class_Security(ByRef f As Object, FName As String)
|
|
|
IntForm = f
|
|
|
formname = FName
|
|
|
'Load form DB
|
|
|
Load_Data(formname)
|
|
|
'Load FormObjects
|
|
|
Me.ctlcol.Clear()
|
|
|
formname = f.Name
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
' AddHandler ctl.HelpRequested, AddressOf Object_MouseDown
|
|
|
'ctl.ContextMenuStrip = Globals.TTContextMenuStrip
|
|
|
'AddHandler ctl.KeyDown, AddressOf Object_MouseDown
|
|
|
Next
|
|
|
Set_Security()
|
|
|
|
|
|
End Function
|
|
|
|
|
|
Public Function Set_Menu_Security(ByRef f As Form, ByRef menu As ToolStripMenuItem, ByVal Menuname As String)
|
|
|
IntForm = f
|
|
|
formname = f.Name
|
|
|
Load_Data(f.Name)
|
|
|
Me.ctlcol.Clear()
|
|
|
formname = f.Name
|
|
|
Dim ctl As Object = menu
|
|
|
Dim typ As System.Type = ctl.GetType
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, Menuname, ctl.Name))
|
|
|
|
|
|
Set_Security()
|
|
|
'If Globals.Set_ToolTips = True Then
|
|
|
' tt.Edit_ToolTips(f, ctlcol)
|
|
|
'Else
|
|
|
' tt.Set_ToolTips(f)
|
|
|
'End If
|
|
|
|
|
|
End Function
|
|
|
|
|
|
Public Function ControlReadonly(ByRef ctlin As Control)
|
|
|
Me.ctlcol.Clear()
|
|
|
For Each ctl As Control In ctlin.Controls
|
|
|
Objectanalysis_readonly(ctl)
|
|
|
Next
|
|
|
|
|
|
End Function
|
|
|
|
|
|
Public Function Set_Form_Readonly(ByRef f As Form)
|
|
|
IntForm = f
|
|
|
Me.formname = f.Name
|
|
|
Load_Data(f.Name)
|
|
|
Me.ctlcol.Clear()
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis_readonly(ctl)
|
|
|
Next
|
|
|
End Function
|
|
|
Public Function Set_Form_Default(ByRef f As Form)
|
|
|
IntForm = f
|
|
|
Me.formname = f.Name
|
|
|
Load_Data(f.Name)
|
|
|
Me.ctlcol.Clear()
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis_default(ctl)
|
|
|
Next
|
|
|
End Function
|
|
|
|
|
|
Private Function Objectanalysis_readonly(ByRef ctl As Object) As String
|
|
|
Dim typ As System.Type = ctl.GetType
|
|
|
Select Case LCase(typ.Name)
|
|
|
Case "splitcontainer"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmpsplit As SplitContainer = ctl
|
|
|
For Each ctrl As Object In tmpsplit.Panel1.Controls
|
|
|
Objectanalysis_readonly(ctrl)
|
|
|
Next
|
|
|
For Each ctrl As Object In tmpsplit.Panel2.Controls
|
|
|
Objectanalysis_readonly(ctrl)
|
|
|
Next
|
|
|
Case "tabcontrol", "clsmytabcontrol"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptabcontrol As TabControl = ctl
|
|
|
For Each ctl In tmptabcontrol.TabPages
|
|
|
Objectanalysis_readonly(ctl)
|
|
|
Next
|
|
|
Case "tabpage"
|
|
|
Dim tmptabpage As TabPage = ctl
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, tmptabpage.Parent.Name, 1))
|
|
|
|
|
|
For Each ctl In tmptabpage.Controls
|
|
|
Objectanalysis_readonly(ctl)
|
|
|
Next
|
|
|
Case "groupbox"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptabpage As GroupBox = ctl
|
|
|
For Each ctl In tmptabpage.Controls
|
|
|
Objectanalysis_readonly(ctl)
|
|
|
Next
|
|
|
Case "panel"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmppanel As Panel = ctl
|
|
|
For Each ctl In tmppanel.Controls
|
|
|
Objectanalysis_readonly(ctl)
|
|
|
Next
|
|
|
Case "textbox"
|
|
|
Dim x As TextBox = ctl
|
|
|
x.BackColor = Color.LightGray
|
|
|
x.ForeColor = Color.Black
|
|
|
x.ReadOnly = True
|
|
|
Case "maskedtextbox"
|
|
|
Dim x As MaskedTextBox = ctl
|
|
|
x.BackColor = Color.LightGray
|
|
|
x.ForeColor = Color.Black
|
|
|
x.ReadOnly = True
|
|
|
Case "combobox"
|
|
|
Dim x As ComboBox = ctl
|
|
|
x.Enabled = False
|
|
|
x.BackColor = Color.LightGray
|
|
|
x.ForeColor = Color.Black
|
|
|
Case "checkbox"
|
|
|
Dim x As CheckBox = ctl
|
|
|
x.Enabled = False
|
|
|
Case "radiobutton"
|
|
|
Dim x As RadioButton = ctl
|
|
|
x.Enabled = False
|
|
|
Case "comboboxtree"
|
|
|
Dim x As Object = ctl
|
|
|
x.enabled = False
|
|
|
x.BackColor = Color.LightGray
|
|
|
x.ForeColor = Color.Black
|
|
|
Case "richtextbox"
|
|
|
Dim x As Object = ctl
|
|
|
x.BackColor = Color.LightGray
|
|
|
x.ForeColor = Color.Black
|
|
|
x.ReadOnly = True
|
|
|
Case "button"
|
|
|
Dim x As Button = ctl
|
|
|
x.Enabled = False
|
|
|
Case "listbox"
|
|
|
Dim x As Object = ctl
|
|
|
ctl.enabled = False
|
|
|
Case "checkedlistbox"
|
|
|
Dim x As Object = ctl
|
|
|
ctl.enabled = False
|
|
|
Case "datetimepicker"
|
|
|
Dim x As Object = ctl
|
|
|
ctl.enabled = False
|
|
|
|
|
|
Case Else
|
|
|
End Select
|
|
|
End Function
|
|
|
|
|
|
Private Function Objectanalysis_default(ByRef ctl As Object) As String
|
|
|
Dim typ As System.Type = ctl.GetType
|
|
|
Select Case LCase(typ.Name)
|
|
|
Case "splitcontainer"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmpsplit As SplitContainer = ctl
|
|
|
For Each ctrl As Object In tmpsplit.Panel1.Controls
|
|
|
Objectanalysis_default(ctrl)
|
|
|
Next
|
|
|
For Each ctrl As Object In tmpsplit.Panel2.Controls
|
|
|
Objectanalysis_default(ctrl)
|
|
|
Next
|
|
|
Case "tabcontrol", "clsmytabcontrol"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptabcontrol As TabControl = ctl
|
|
|
For Each ctl In tmptabcontrol.TabPages
|
|
|
Objectanalysis_default(ctl)
|
|
|
Next
|
|
|
Case "tabpage"
|
|
|
Dim tmptabpage As TabPage = ctl
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, tmptabpage.Parent.Name, 1))
|
|
|
For Each ctl In tmptabpage.Controls
|
|
|
Objectanalysis_default(ctl)
|
|
|
Next
|
|
|
Case "groupbox"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptabpage As GroupBox = ctl
|
|
|
For Each ctl In tmptabpage.Controls
|
|
|
Objectanalysis_default(ctl)
|
|
|
Next
|
|
|
Case "panel"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmppanel As Panel = ctl
|
|
|
For Each ctl In tmppanel.Controls
|
|
|
Objectanalysis_default(ctl)
|
|
|
Next
|
|
|
Case "textbox"
|
|
|
Dim x As TextBox = ctl
|
|
|
x.BackColor = Color.White
|
|
|
x.ForeColor = Color.Black
|
|
|
x.Enabled = True
|
|
|
x.ReadOnly = False
|
|
|
Case "maskedtextbox"
|
|
|
Dim x As MaskedTextBox = ctl
|
|
|
x.BackColor = Color.White
|
|
|
x.ForeColor = Color.Black
|
|
|
x.Enabled = True
|
|
|
x.ReadOnly = False
|
|
|
Case "combobox"
|
|
|
Dim x As ComboBox = ctl
|
|
|
x.Enabled = True
|
|
|
x.BackColor = Color.White
|
|
|
x.ForeColor = Color.Black
|
|
|
Case "checkbox"
|
|
|
Dim x As CheckBox = ctl
|
|
|
x.Enabled = True
|
|
|
Case "radiobutton"
|
|
|
Dim x As RadioButton = ctl
|
|
|
x.Enabled = True
|
|
|
Case "comboboxtree"
|
|
|
Dim x As Object = ctl
|
|
|
x.enabled = True
|
|
|
x.BackColor = Color.White
|
|
|
x.ForeColor = Color.Black
|
|
|
Case "richtextbox"
|
|
|
Dim x As Object = ctl
|
|
|
x.BackColor = Color.White
|
|
|
x.ForeColor = Color.Black
|
|
|
x.enabled = True
|
|
|
Case "button"
|
|
|
Dim x As Button = ctl
|
|
|
x.Enabled = True
|
|
|
Case "listbox"
|
|
|
Dim x As Object = ctl
|
|
|
ctl.enabled = True
|
|
|
Case "checkedlistbox"
|
|
|
Dim x As Object = ctl
|
|
|
ctl.enabled = True
|
|
|
Case "datetimepicker"
|
|
|
Dim x As Object = ctl
|
|
|
ctl.enabled = True
|
|
|
Case Else
|
|
|
End Select
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
''' Daten ab Datenbank laden
|
|
|
''' </summary>
|
|
|
''' <remarks></remarks>
|
|
|
Private Sub Load_Data(ByVal Formname As String)
|
|
|
Try
|
|
|
'xxx
|
|
|
If SecurityData.Tables.Count > 0 Then
|
|
|
SecurityData.Tables.Clear()
|
|
|
End If
|
|
|
' Exit Sub
|
|
|
Catch ex As Exception
|
|
|
End Try
|
|
|
SecurityData.Tables.Clear()
|
|
|
Dim sqlcmd As New SqlCommand
|
|
|
|
|
|
sqlcmd.CommandText = "dbo.my_security_get_data"
|
|
|
sqlcmd.Parameters.Add("@FormName", SqlDbType.VarChar, 255)
|
|
|
sqlcmd.Parameters.Add("@Mitarbeiternr", SqlDbType.Int, 4)
|
|
|
sqlcmd.Parameters(0).Value = Formname
|
|
|
sqlcmd.Parameters(1).Value = Globals.ActUser
|
|
|
|
|
|
sqlcmd.CommandType = CommandType.StoredProcedure
|
|
|
sqlcmd.Connection = connection
|
|
|
Try
|
|
|
connection.ConnectionString = My.Settings.ConnectionString
|
|
|
connection.Open()
|
|
|
da.SelectCommand = sqlcmd
|
|
|
da.Fill(SecurityData, "SecurityTable")
|
|
|
|
|
|
Globals.SecurityDaten.Tables.Add(SecurityData.Tables(0).Copy)
|
|
|
Catch ex As Exception
|
|
|
'MsgBox(ex.Message)
|
|
|
Finally
|
|
|
connection.Close()
|
|
|
da.Dispose()
|
|
|
sqlcmd.Dispose()
|
|
|
End Try
|
|
|
End Sub
|
|
|
''' <summary>
|
|
|
''' Pr<50>ft die DB-Eintr<74>ge mit den Formcontrols und bei <20>bereinstimmung werden die Security-Einstellungen gesetzt
|
|
|
''' </summary>
|
|
|
''' <remarks></remarks>
|
|
|
Private Sub Set_Security()
|
|
|
Dim i As Integer
|
|
|
For i = 0 To Me.SecurityData.Tables(0).Rows.Count - 1
|
|
|
Dim SecurityObject As String = Me.SecurityData.Tables(0).Rows(i).Item("SecurityObject")
|
|
|
Dim SecurityObjectitem As String = Me.SecurityData.Tables(0).Rows(i).Item("SecurityObjectItem")
|
|
|
Dim read_only As Boolean = Me.SecurityData.Tables(0).Rows(i).Item("readonly")
|
|
|
Dim invisible As Boolean = Me.SecurityData.Tables(0).Rows(i).Item("invisible")
|
|
|
Dim ii As Integer
|
|
|
For ii = 1 To ctlcol.Count
|
|
|
Dim secobj As MyFormControls = ctlcol(ii)
|
|
|
If secobj.MySecurityObject = SecurityObject And secobj.MySecurityObjectItem = SecurityObjectitem Then
|
|
|
Set_Preferences(secobj.MyControl, read_only, invisible, SecurityObjectitem)
|
|
|
End If
|
|
|
Next
|
|
|
Next
|
|
|
End Sub
|
|
|
|
|
|
''' <summary>
|
|
|
''' Security-Einstellungen setzen
|
|
|
''' </summary>
|
|
|
''' <param name="obj">Betroffenes Objeckt (Menuitem, Conrol usw.)</param>
|
|
|
''' <param name="read_only">Readonly ja/nein</param>
|
|
|
''' <param name="invisible">Sichtbar ja/nein</param>
|
|
|
''' <param name="SecurityObjectItem">Name des Unterobjektes - wird f<>r die Spalteneinstellungen von C1TruedbGrids verwendet</param>
|
|
|
''' <remarks></remarks>
|
|
|
Private Sub Set_Preferences(ByRef obj As Object, ByVal read_only As Boolean, ByVal invisible As Boolean, ByVal SecurityObjectItem As String)
|
|
|
Dim objtype As System.Type = obj.GetType
|
|
|
Select Case LCase(objtype.Name)
|
|
|
Case "button"
|
|
|
Dim ctl As Button = obj
|
|
|
If read_only Then ctl.Enabled = False
|
|
|
If invisible Then
|
|
|
ctl.Visible = False
|
|
|
ctl.Enabled = False
|
|
|
End If
|
|
|
Case "groupbox"
|
|
|
Dim ctl As GroupBox = obj
|
|
|
If read_only Then ctl.Enabled = False
|
|
|
If invisible = True Then
|
|
|
ctl.Visible = False
|
|
|
ctl.Enabled = False
|
|
|
|
|
|
End If
|
|
|
|
|
|
Case "toolstripmenuitem"
|
|
|
Dim ctl As ToolStripMenuItem = obj
|
|
|
If read_only Then ctl.Enabled = False
|
|
|
If invisible Then
|
|
|
ctl.Visible = False
|
|
|
ctl.Enabled = False
|
|
|
End If
|
|
|
Case "textbox", "label", "combobox", "checkbox", "toolstripbutton", "panel", "datetimepicker", "maskedtextbox", "comboboxtree"
|
|
|
If read_only Then obj.Enabled = False
|
|
|
If invisible Then obj.Visible = False
|
|
|
Case "richtextbox"
|
|
|
If read_only Then obj.Enabled = False
|
|
|
Try
|
|
|
obj.readonly = True
|
|
|
obj.enabled = True
|
|
|
Catch ex As Exception
|
|
|
End Try
|
|
|
If invisible Then obj.Visible = False
|
|
|
Case "tabpage"
|
|
|
If invisible Then
|
|
|
Dim tbp As TabPage = obj
|
|
|
For Each x As MyFormControls In Me.ctlcol
|
|
|
If x.MySecurityObject = tbp.Parent.Name Then
|
|
|
Dim tb As TabControl = x.MyControl
|
|
|
tb.TabPages.Remove(tbp)
|
|
|
Exit Sub
|
|
|
End If
|
|
|
Next
|
|
|
End If
|
|
|
'20100406 - TabPageHandling
|
|
|
If read_only Then
|
|
|
'obj.enabled = False
|
|
|
For Each CTLX As Control In obj.CONTROLS
|
|
|
Me.Objectanalysis_readonly(CTLX)
|
|
|
Next
|
|
|
End If
|
|
|
Case "c1truedbgrid"
|
|
|
Dim ctl As C1TrueDBGrid = obj
|
|
|
If SecurityObjectItem = "" Then
|
|
|
If read_only Then ctl.Enabled = False
|
|
|
If invisible Then obj.Visible = False
|
|
|
Else
|
|
|
If read_only Then ctl.Splits(0).DisplayColumns(SecurityObjectItem).Locked = True
|
|
|
If invisible Then ctl.Splits(0).DisplayColumns(SecurityObjectItem).Visible = False
|
|
|
End If
|
|
|
|
|
|
End Select
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
#Region "Read Objects from Form and save to Database"
|
|
|
Dim tmpmenuname As String
|
|
|
''' <summary>
|
|
|
''' Alle Controls des Formulars zusammensuchen und auf der DB speichern
|
|
|
''' </summary>
|
|
|
''' <param name="f">Betroffenes Formular</param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
'''
|
|
|
Public Function List_Class_Controls(ByRef f As Object, ByVal FName As String)
|
|
|
Dim counter As Integer = 0
|
|
|
Me.ctlcol.Clear()
|
|
|
formname = FName
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
Dim i As Integer
|
|
|
For i = 1 To ctlcol.Count
|
|
|
Dim secobj As MyFormControls = ctlcol(i)
|
|
|
counter = counter + secobj.Write_Object_to_DB()
|
|
|
' secobj.Write_Object_to_DB("Personal")
|
|
|
Next
|
|
|
MsgBox(FName + ": " + counter.ToString + " SecurityObjekte wurden generiert.", MsgBoxStyle.Information, FName)
|
|
|
End Function
|
|
|
|
|
|
Public Function List_Form_Controls(ByRef f As Form)
|
|
|
Dim counter As Integer = 0
|
|
|
Me.ctlcol.Clear()
|
|
|
formname = f.Name
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
Dim i As Integer
|
|
|
For i = 1 To ctlcol.Count
|
|
|
Dim secobj As MyFormControls = ctlcol(i)
|
|
|
counter = counter + secobj.Write_Object_to_DB()
|
|
|
Next
|
|
|
MsgBox(f.Name + ": " + counter.ToString + " SecurityObjekte wurden generiert.", MsgBoxStyle.Information, formname)
|
|
|
End Function
|
|
|
|
|
|
''' <summary>
|
|
|
''' S<>mtliche Controls vom Formular auslesen
|
|
|
''' </summary>
|
|
|
''' <param name="ctl"></param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
Private Function Objectanalysis(ByRef ctl As Object) As String
|
|
|
Dim typ As System.Type = ctl.GetType
|
|
|
Select Case LCase(typ.Name)
|
|
|
Case "menustrip"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
tmpmenuname = ctl.name
|
|
|
ReadMenu(ctl)
|
|
|
Case "contextmenustrip"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
tmpmenuname = ctl.name
|
|
|
ReadContextMenu(ctl)
|
|
|
Case "toolstrip"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptoolstrop As ToolStrip = ctl
|
|
|
Try
|
|
|
Dim ic As Integer
|
|
|
For ic = 0 To tmptoolstrop.Items.Count - 1
|
|
|
Try
|
|
|
Dim subobj As ToolStripButton
|
|
|
subobj = tmptoolstrop.Items(ic)
|
|
|
ctlcol.Add(New MyFormControls(subobj, formname, typ.Name, ctl.Name, subobj.Name, 1))
|
|
|
Catch ex As Exception
|
|
|
|
|
|
End Try
|
|
|
|
|
|
Next
|
|
|
'For Each subobj As ToolStripButton In tmptoolstrop.Items
|
|
|
'ctlcol.Add(New MyFormControls(subobj, formname, typ.Name, ctl.Name, subobj.Name, 1))
|
|
|
'Next
|
|
|
Catch
|
|
|
End Try
|
|
|
Case "splitcontainer"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmpsplit As SplitContainer = ctl
|
|
|
For Each ctrl As Object In tmpsplit.Panel1.Controls
|
|
|
Objectanalysis(ctrl)
|
|
|
Next
|
|
|
For Each ctrl As Object In tmpsplit.Panel2.Controls
|
|
|
Objectanalysis(ctrl)
|
|
|
Next
|
|
|
Case "tabcontrol", "clsmytabcontrol"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptabcontrol As TabControl = ctl
|
|
|
For Each ctl In tmptabcontrol.TabPages
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
|
|
|
Case "tabpage"
|
|
|
Dim tmptabpage As TabPage = ctl
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, tmptabpage.Parent.Name, 1))
|
|
|
For Each ctl In tmptabpage.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
Case "groupbox"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmptabpage As GroupBox = ctl
|
|
|
For Each ctl In tmptabpage.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
Case "panel"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim tmppanel As Panel = ctl
|
|
|
For Each ctl In tmppanel.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
Case "c1truedbgrid"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim ctrl As C1TrueDBGrid = ctl
|
|
|
Dim i As Integer
|
|
|
For i = 0 To ctrl.Columns.Count - 1
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ctrl.Columns(i).Caption, 0, ctrl.Columns(i).Caption))
|
|
|
Next
|
|
|
Try
|
|
|
If ctrl.ContextMenuStrip.Name <> "" Then
|
|
|
Dim x As ContextMenuStrip = ctrl.ContextMenuStrip
|
|
|
Objectanalysis(x)
|
|
|
End If
|
|
|
Catch ex As Exception
|
|
|
|
|
|
End Try
|
|
|
For Each xctl As Object In ctrl.Controls
|
|
|
Objectanalysis(xctl)
|
|
|
Next
|
|
|
Case "treeview"
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
Dim ctrl As TreeView = ctl
|
|
|
Try
|
|
|
|
|
|
If ctrl.ContextMenuStrip.Name <> "" Then
|
|
|
Dim x As ContextMenuStrip = ctrl.ContextMenuStrip
|
|
|
Objectanalysis(x)
|
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|
End Try
|
|
|
|
|
|
Case Else
|
|
|
If ctl.name = "TreeStruktur" Then
|
|
|
End If
|
|
|
ctlcol.Add(New MyFormControls(ctl, formname, typ.Name, ctl.Name, ""))
|
|
|
End Select
|
|
|
End Function
|
|
|
|
|
|
''' <summary>
|
|
|
''' Auslesen von MenuItems
|
|
|
''' </summary>
|
|
|
''' <param name="x"></param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
'''
|
|
|
Dim level As Integer = 0
|
|
|
Private Function ReadMenu(ByRef x As Object)
|
|
|
Dim tmpmnu As MenuStrip = x
|
|
|
level = 0
|
|
|
For Each xx As Object In tmpmnu.Items
|
|
|
Dim objtype As System.Type = xx.GetType
|
|
|
If LCase(objtype.Name) = "toolstripmenuitem" Then
|
|
|
ctlcol.Add(New MyFormControls(xx, formname, "menustrip", tmpmenuname, xx.Name, level))
|
|
|
get_all_menus(xx)
|
|
|
End If
|
|
|
Next
|
|
|
End Function
|
|
|
''' <summary>
|
|
|
''' Auslesen von ContextMenuItems
|
|
|
''' </summary>
|
|
|
''' <param name="x"></param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
'''
|
|
|
|
|
|
Private Function ReadContextMenu(ByRef x As Object)
|
|
|
Dim tmpmnu As ContextMenuStrip = x
|
|
|
level = 0
|
|
|
Try
|
|
|
For Each xx As Object In tmpmnu.Items
|
|
|
Dim objtype As System.Type = xx.GetType
|
|
|
If LCase(objtype.Name) = "toolstripmenuitem" Then
|
|
|
ctlcol.Add(New MyFormControls(xx, formname, "menustrip", tmpmenuname, xx.Name, level))
|
|
|
get_all_menus(xx)
|
|
|
End If
|
|
|
' ctlcol.Add(New MyFormControls(xx, formname, "contextmenustrip", tmpmenuname, xx.Name, level))
|
|
|
' get_all_menus(xx)
|
|
|
Next
|
|
|
Catch ex As Exception
|
|
|
End Try
|
|
|
End Function
|
|
|
''' <summary>
|
|
|
''' Auslesen von Menu-Subitems
|
|
|
''' </summary>
|
|
|
''' <param name="xx"></param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
Private Function get_all_menus(ByRef xx As ToolStripMenuItem)
|
|
|
level = level + 1
|
|
|
For Each subobj As Object In xx.DropDownItems
|
|
|
If LCase(subobj.GetType.Name) = "toolstripmenuitem" Then
|
|
|
ctlcol.Add(New MyFormControls(subobj, formname, "menustrip", tmpmenuname, subobj.Name, level))
|
|
|
get_all_menus(subobj)
|
|
|
End If
|
|
|
Next
|
|
|
level = level - 1
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
''' Pr<50>ft, ob das Security-Objekt bereits auf der DB vorhanden ist
|
|
|
''' </summary>
|
|
|
''' <param name="securityform">Formular</param>
|
|
|
''' <param name="securityobjecttype">Objekttyp</param>
|
|
|
''' <param name="securityobject">Objektname</param>
|
|
|
''' <param name="securityobjectitem">Objektitem</param>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
Private Function Objexists(ByVal securityform As String, ByVal securityobjecttype As String, ByVal securityobject As String, ByVal securityobjectitem As String) As Boolean
|
|
|
Dim db As New clsDB
|
|
|
If db.Objexists(securityform, securityobjecttype, securityobject, securityobjectitem) Then Return True Else Return False
|
|
|
End Function
|
|
|
|
|
|
#End Region
|
|
|
|
|
|
#Region "ScreenDoku"
|
|
|
|
|
|
Public Function Print_Screen(ByRef ctl As Control)
|
|
|
saveasbitmap(ctl, ctl.Name)
|
|
|
End Function
|
|
|
Public Function Generate_HTML()
|
|
|
saveasbitmap(Me.IntForm, "testform")
|
|
|
'Exit Function
|
|
|
'Dim x As MyFormControls
|
|
|
'For Each x In ctlcol
|
|
|
' Try
|
|
|
' saveasbitmap(x.MyControl, x.MyFormname & "_" & x.MySecurityObject & "_" & x.MySecurityObjectItem)
|
|
|
' If x.MySecurityObjecttype = "ToolStrip" And x.MySecurityObjectItem = "" Then
|
|
|
' Dim gaga As ToolStrip = x.MyControl
|
|
|
' For Each c As ToolStripButton In gaga.Items
|
|
|
' Dim xxx As Control = CType(c, Control)
|
|
|
|
|
|
' xxx = CType(c, Control)
|
|
|
' saveasbitmap(xxx, "xxx")
|
|
|
' Next
|
|
|
' End If
|
|
|
' Catch ex As Exception
|
|
|
' MsgBox(ex.Message)
|
|
|
' End Try
|
|
|
'Next
|
|
|
End Function
|
|
|
|
|
|
Public Function saveasbitmap(ByRef ctl As Control, ByVal filename As String)
|
|
|
|
|
|
End Function
|
|
|
|
|
|
#Region "check_obsolet"
|
|
|
Public Function Check_Obsoloet(ByVal f As Object, Optional Classname As String = "", Optional Formularname As String = "")
|
|
|
Dim s As String = ""
|
|
|
'Bestehende Daten lesen
|
|
|
If Classname <> "" Then
|
|
|
load_form_data(Classname)
|
|
|
If Formularname = "" Then Formularname = Classname
|
|
|
Else
|
|
|
load_form_data(f.Name)
|
|
|
If Formularname = "" Then Formularname = f.name
|
|
|
End If
|
|
|
|
|
|
'Formular_analyiseren()
|
|
|
Me.ctlcol.Clear()
|
|
|
If Classname <> "" Then
|
|
|
formname = Classname
|
|
|
Else
|
|
|
formname = f.Name
|
|
|
End If
|
|
|
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
|
|
|
s = ""
|
|
|
Dim i As Integer
|
|
|
Dim found As Boolean
|
|
|
For Each r As DataRow In SecurityData.Tables(0).Rows
|
|
|
found = False
|
|
|
|
|
|
For i = 1 To ctlcol.Count
|
|
|
Dim secobj As MyFormControls = ctlcol(i)
|
|
|
If secobj.MyFormname = r("securityform") And
|
|
|
secobj.MySecurityObject = r("SecurityObject") And
|
|
|
secobj.MySecurityObjectItem = r("Securityobjectitem") And
|
|
|
secobj.MySecurityObjecttype = r("SecurityObjectType") Then
|
|
|
found = True
|
|
|
Exit For
|
|
|
End If
|
|
|
Next
|
|
|
If Not found Then
|
|
|
If s <> "" Then s = s + vbCrLf
|
|
|
s = s + "- " + r("securityObject") + "/" + r("Securityobjectitem")
|
|
|
End If
|
|
|
Next
|
|
|
If s <> "" Then s = Formularname + ": Folgende Elemente sind nicht mehr vorhanden:" + vbCrLf + vbCrLf + s Else s = Formularname + ": Alle Objekte werden verwendet."
|
|
|
MsgBox(s, MsgBoxStyle.Information, Formularname)
|
|
|
End Function
|
|
|
|
|
|
Public Function Delete_Obsoloet(ByVal f As Object, Optional Classname As String = "", Optional Formularname As String = "")
|
|
|
Dim s As String = ""
|
|
|
'Bestehende Daten lesen
|
|
|
If Classname <> "" Then
|
|
|
load_form_data(Classname)
|
|
|
If Formularname = "" Then Formularname = Classname
|
|
|
Else
|
|
|
load_form_data(f.Name)
|
|
|
If Formularname = "" Then Formularname = f.name
|
|
|
End If
|
|
|
|
|
|
'Formular_analyiseren()
|
|
|
Me.ctlcol.Clear()
|
|
|
If Classname <> "" Then
|
|
|
formname = Classname
|
|
|
Else
|
|
|
formname = f.Name
|
|
|
End If
|
|
|
For Each ctl As Control In f.Controls
|
|
|
Objectanalysis(ctl)
|
|
|
Next
|
|
|
|
|
|
Dim delcounter As Integer = 0
|
|
|
Dim i As Integer
|
|
|
Dim found As Boolean
|
|
|
For Each r As DataRow In SecurityData.Tables(0).Rows
|
|
|
found = False
|
|
|
For i = 1 To ctlcol.Count
|
|
|
Dim secobj As MyFormControls = ctlcol(i)
|
|
|
If secobj.MyFormname = r("securityform") And
|
|
|
secobj.MySecurityObject = r("SecurityObject") And
|
|
|
secobj.MySecurityObjectItem = r("Securityobjectitem") And
|
|
|
secobj.MySecurityObjecttype = r("SecurityObjectType") Then
|
|
|
found = True
|
|
|
Exit For
|
|
|
End If
|
|
|
Next
|
|
|
If Not found Then
|
|
|
Delete_Security_Object(r("securityobjectnr"))
|
|
|
delcounter = delcounter + 1
|
|
|
End If
|
|
|
Next
|
|
|
MsgBox(Formularname + ": " + delcounter.ToString + " SecurityObjekte wurden gel<65>scht.", MsgBoxStyle.Information, Formularname)
|
|
|
|
|
|
End Function
|
|
|
|
|
|
Public Sub load_form_data(ByVal formname As String)
|
|
|
Try
|
|
|
'xxx
|
|
|
If SecurityData.Tables.Count > 0 Then
|
|
|
SecurityData.Tables.Clear()
|
|
|
End If
|
|
|
' Exit Sub
|
|
|
Catch ex As Exception
|
|
|
End Try
|
|
|
SecurityData.Tables.Clear()
|
|
|
Dim sqlcmd As New SqlCommand
|
|
|
|
|
|
sqlcmd.CommandText = "dbo.my_security_get_formdata"
|
|
|
sqlcmd.Parameters.Add("@FormName", SqlDbType.VarChar, 255)
|
|
|
sqlcmd.Parameters(0).Value = formname
|
|
|
|
|
|
sqlcmd.CommandType = CommandType.StoredProcedure
|
|
|
sqlcmd.Connection = connection
|
|
|
Try
|
|
|
connection.ConnectionString = Me.Connectionstring
|
|
|
connection.Open()
|
|
|
da.SelectCommand = sqlcmd
|
|
|
da.Fill(SecurityData, "SecurityTable")
|
|
|
Catch ex As Exception
|
|
|
Finally
|
|
|
connection.Close()
|
|
|
da.Dispose()
|
|
|
sqlcmd.Dispose()
|
|
|
End Try
|
|
|
End Sub
|
|
|
|
|
|
Public Sub Delete_Security_Object(ByVal key As Integer)
|
|
|
Dim sqlcmd As New SqlCommand
|
|
|
|
|
|
sqlcmd.CommandText = "dbo.my_security_delete"
|
|
|
sqlcmd.Parameters.Add("@key", SqlDbType.Int, 4)
|
|
|
sqlcmd.Parameters.Add("@mutierer", SqlDbType.Int, 4)
|
|
|
sqlcmd.Parameters(0).Value = key
|
|
|
sqlcmd.Parameters(1).Value = Globals.ActUser
|
|
|
|
|
|
sqlcmd.CommandType = CommandType.StoredProcedure
|
|
|
sqlcmd.Connection = connection
|
|
|
Try
|
|
|
connection.ConnectionString = Me.Connectionstring
|
|
|
connection.Open()
|
|
|
sqlcmd.ExecuteNonQuery()
|
|
|
Catch ex As Exception
|
|
|
MsgBox(ex.Message)
|
|
|
Finally
|
|
|
connection.Close()
|
|
|
sqlcmd.Dispose()
|
|
|
End Try
|
|
|
End Sub
|
|
|
#End Region
|
|
|
|
|
|
|
|
|
#End Region
|
|
|
|
|
|
|
|
|
End Class
|
|
|
''' <summary>
|
|
|
''' Klasse f<>r ein Control-Objekt
|
|
|
''' </summary>
|
|
|
''' <remarks></remarks>
|
|
|
Public Class MyFormControls
|
|
|
|
|
|
Public MyControl As Object
|
|
|
Public MyFormname As String
|
|
|
Public MySecurityObjecttype As String
|
|
|
Public MySecurityObject As String
|
|
|
Public MySecurityObjectItem As String
|
|
|
Public MyDescription As String
|
|
|
Public MyLevel As Integer
|
|
|
|
|
|
''' <summary>
|
|
|
''' Neue Instanz erstellen
|
|
|
''' </summary>
|
|
|
''' <param name="ctl">Control-Objekt</param>
|
|
|
''' <param name="Formname">Betroffenes Formular</param>
|
|
|
''' <param name="securityobjecttype">Objekttyp</param>
|
|
|
''' <param name="Securityobject">Objektname</param>
|
|
|
''' <param name="SecurityObjectItem">Unterobjekt (z.B. bei Menus, Spalten von C1TrueDBGrids)</param>
|
|
|
''' <remarks></remarks>
|
|
|
Sub New(ByVal ctl As Object, ByVal Formname As String, ByVal securityobjecttype As String, ByVal Securityobject As String, ByVal SecurityObjectItem As String, Optional ByVal level As Integer = 0, Optional ByVal desc As String = "")
|
|
|
MyControl = ctl
|
|
|
MySecurityObjecttype = securityobjecttype
|
|
|
MyFormname = Formname
|
|
|
MySecurityObject = Securityobject
|
|
|
MySecurityObjectItem = SecurityObjectItem
|
|
|
If desc = "" Then
|
|
|
MyDescription = Get_Description(ctl)
|
|
|
Else
|
|
|
MyDescription = desc
|
|
|
End If
|
|
|
Try
|
|
|
MyDescription = MyDescription.Replace("&", "")
|
|
|
Catch ex As Exception
|
|
|
End Try
|
|
|
MyLevel = level
|
|
|
End Sub
|
|
|
|
|
|
Private Function Get_Description(ByRef ctl As Object) As String
|
|
|
Dim typ As System.Type = ctl.GetType
|
|
|
Select Case LCase(typ.Name)
|
|
|
Case "menustrip", "toolstripmenuitem", "toolstrip", "toolstripbutton", "contextmenustrip", "tabpage", "c1truedbgrid", "label"
|
|
|
Return ctl.Text
|
|
|
Case Else
|
|
|
Return ctl.Name
|
|
|
End Select
|
|
|
|
|
|
End Function
|
|
|
|
|
|
Public Function Write_Object_to_DB()
|
|
|
Dim db As New clsDB
|
|
|
db.Get_Tabledata("SecurityObject", "where SecurityObjectNr=-1")
|
|
|
Dim r As DataRow = db.dsDaten.Tables(0).NewRow
|
|
|
r.Item(1) = MyFormname
|
|
|
r.Item(2) = MySecurityObjecttype
|
|
|
r.Item(3) = MySecurityObject
|
|
|
r.Item(4) = MySecurityObjectItem
|
|
|
r.Item(5) = ""
|
|
|
r.Item(6) = 0
|
|
|
r.Item(7) = True
|
|
|
r.Item(8) = Now
|
|
|
r.Item(9) = Now
|
|
|
r.Item(10) = Globals.ActUser
|
|
|
r.Item(11) = Globals.Mandant
|
|
|
db.dsDaten.Tables(0).Rows.Add(r)
|
|
|
db.Update_Data()
|
|
|
End Function
|
|
|
''' <summary>
|
|
|
''' Schreibt einen Datnsatz in die Tabelle SecurityObjects
|
|
|
''' </summary>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
'''
|
|
|
'Public Function Write_Object_to_DB() As Integer
|
|
|
' If Objexists() Then
|
|
|
' Return 0
|
|
|
' Exit Function
|
|
|
' End If
|
|
|
' Dim sectbl As New TKB.VV.DB.clsSecurityObject
|
|
|
' Dim dbkey As New TKB.VV.DB.clsMyKey_Tabelle
|
|
|
' dbkey.cpMainConnectionProvider = Globals.conn
|
|
|
' Dim newkey As Integer = dbkey.get_dbkey("SecurityObject")
|
|
|
|
|
|
'sectbl.cpMainConnectionProvider = Me.con
|
|
|
'conn.OpenConnection()
|
|
|
' sectbl.iSecurityObjectNr = New SqlInt32(CType(newkey, Int32))
|
|
|
' sectbl.sSecurityForm = New SqlString(CType(MyFormname, String))
|
|
|
' sectbl.sSecurityObjectType = New SqlString(CType(Me.MySecurityObjecttype, String))
|
|
|
' sectbl.sSecurityObject = New SqlString(CType(Me.MySecurityObject, String))
|
|
|
' sectbl.sSecurityObjectItem = New SqlString(CType(Me.MySecurityObjectItem, String))
|
|
|
' sectbl.bAktiv = New SqlBoolean(CType(True, Boolean))
|
|
|
' sectbl.daErstellt_am = New SqlDateTime(CType(Now, DateTime))
|
|
|
' sectbl.daMutiert_am = New SqlDateTime(CType(Now, DateTime))
|
|
|
' sectbl.sSecurityObjectDescriotion = New SqlString(CType(Me.MyDescription, String))
|
|
|
' sectbl.iLevel = New SqlInt32(CType(Me.MyLevel, Int32))
|
|
|
'sectbl.iMutierer = New SqlInt32(CType(Globals.ActUser, Int32))
|
|
|
'sectbl.iMandantnr = New SqlInt32(CType(Globals.Mandant, Int32))
|
|
|
'sectbl.Insert()
|
|
|
' conn.CloseConnection(True)
|
|
|
' sectbl.Dispose()
|
|
|
' dbkey.Dispose()
|
|
|
' Return 1
|
|
|
'End Function
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
'''Pr<50>ft, ob das Security-Objekt bereits auf der DB vorhanden ist
|
|
|
''' </summary>
|
|
|
''' <returns></returns>
|
|
|
''' <remarks></remarks>
|
|
|
Private Function Objexists() As Boolean
|
|
|
Dim db As New clsDB
|
|
|
If db.Objexists(Me.MyFormname, Me.MySecurityObjecttype, MySecurityObject, MySecurityObjectItem) Then Return True Else Return False
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
End Class
|
|
|
|
|
|
Public Class ControlsCollection
|
|
|
Private Shared m_controls As Collection
|
|
|
Public Sub New(ByVal myForm As Form)
|
|
|
m_controls = New Collection
|
|
|
'create a control walker to get
|
|
|
'all controls on the form
|
|
|
Dim aControlWalker As New ControlWalker(myForm)
|
|
|
End Sub
|
|
|
'This property returns the collection of all controls
|
|
|
'on the form
|
|
|
ReadOnly Property Controls() As Collection
|
|
|
Get
|
|
|
Return m_controls
|
|
|
End Get
|
|
|
End Property
|
|
|
|
|
|
Public Function FindControl(ByVal ctlname As String) As Boolean
|
|
|
Dim i As Integer
|
|
|
For i = 1 To Me.m_controls.Count
|
|
|
Dim ctl As Control = m_controls(i)
|
|
|
If UCase(ctl.Name) = UCase(ctlname) Then MsgBox("found")
|
|
|
Next
|
|
|
End Function
|
|
|
Private Class ControlWalker
|
|
|
' This class recursively walks through all controls
|
|
|
' in a container, and all containers contained in
|
|
|
' this container, visiting all controls throughout
|
|
|
' the hierarchy
|
|
|
Private mContainer As Object
|
|
|
Public Sub New(ByVal Container As Object)
|
|
|
Dim cControl As Control
|
|
|
If Container.haschildren Then
|
|
|
For Each cControl In Container.controls
|
|
|
'add this control to the controls collection
|
|
|
m_controls.Add(cControl)
|
|
|
If cControl.HasChildren Then
|
|
|
'This control has children, create another
|
|
|
'ControlWalk go visit each of them
|
|
|
Dim cWalker As New ControlWalker(cControl)
|
|
|
End If
|
|
|
Next cControl
|
|
|
End If
|
|
|
End Sub
|
|
|
End Class
|
|
|
End Class
|