Torna al Thread
Option Explicit On
Option Strict On
Public Class ClasseMostraBloccaControlliNuova
Private Shared Sub MostraONascondeIlControllo(ByRef Ct As Control, ByVal Stato As Integer)
'Rende invisibile il controllo se ha -Nn- nella proprietà TAG; visibile se ha -Vn- dove 'n' è
'il numero dello stato e ignora i restanti e ignora i controlli che non specificano niente x questo stato
If IsNothing(Ct.Tag) Then Exit Sub 'Se il Tag è uguale a stringa nulla il controllo nn viene trattato
'Se qui, c'è un Tag nn vuoto
Dim T As String = DirectCast(Ct.Tag, String)
T = T.ToUpper
Dim Vn As String = "-V" & Stato.ToString & "-"
Dim Nn As String = "-N" & Stato.ToString & "-"
If T.IndexOf(Vn) >= 0 Then
'Se qui, allora in Tag del controllo contiene "-Vn-" e il controllo deve quindi essere Visto nello stato n
Ct.Visible = True
ElseIf T.IndexOf(Nn) >= 0 Then
'Se qui, allora in Tag del controllo contiene "-Nn-" e il controllo deve quindi essere Nascosto nello stato n
Ct.Visible = False
End If
End Sub
Private Shared Sub BloccaOSbloccaIlControllo(ByRef Ct As Control, ByVal Stato As Int32)
'Disabilita il controllo se ha -Nn- nella proprietà TAG; lo abilita se ha -Vn- dove 'n' è
'il numero dello stato e ignora i controlli che non specificano niente x questo stato
If IsNothing(Ct.Tag) Then Exit Sub 'Se il Tag è uguale a stringa nulla il controllo nn viene trattato
'Se qui, c'è un Tag nn vuoto
Dim T As String = DirectCast(Ct.Tag, String)
T = T.ToUpper
Dim Vn As String = "-SB" & Stato.ToString & "-"
Dim Nn As String = "-BL" & Stato.ToString & "-"
Dim tb As TextBox
Dim rb As RadioButton
If T.IndexOf(Vn) >= 0 Then
'Se qui, allora in Tag del controllo contiene "-Vn-" e il controllo deve quindi essere abilitato nello stato n
'Se è una textbox, si toglie il readonly
If TypeOf Ct Is TextBox Then
tb = CType(Ct, TextBox)
tb.ReadOnly = False
tb.Enabled = True 'Alcune textbox personalizzate vengono bloccate disabilitandole
Exit Sub
End If
Ct.Enabled = True
ElseIf T.IndexOf(Nn) >= 0 Then
'Se qui, allora in Tag del controllo contiene "-Nn-" e il controllo deve quindi essere disabilitato nello stato n
'Se il controllo è un radio button si disabilita solo se nn è selezionato
If TypeOf Ct Is RadioButton Then
rb = CType(Ct, RadioButton)
rb.Enabled = rb.Checked
Exit Sub
End If
'Se è una textbox, e contiene "-READONLY-" nel TAG, si mette readonly
If TypeOf Ct Is TextBox And Not Ct.GetType.ToString.ToUpper = "LIBRERIACONTROLLI.TXBMONETARIA" Then
tb = CType(Ct, TextBox)
tb.ReadOnly = True
Exit Sub
End If
'Se è un qualsiasi altro controllo, compresa la textboxmonetaria, lo si disabilita
Ct.Enabled = False
End If
End Sub
''' <summary>
''' Rende invisibili i controlli che nel Form hanno -Nn- nella proprietà TAG, visibili quelli che
''' hanno -Vn- dove 'n' è il numero dello stato e ignora i restanti .Parimenti blocca i controlli
''' con -BLn- e sblocca quelli con -SBn- dove n è lo stato e ignora quelli che non hanno
''' specifiche x questo stato
''' </summary>
''' <param name="IlForm"></param>
''' <param name="Stato"></param>
''' <remarks></remarks>
Public Shared Sub SistemaControlliPerLoStato(ByRef IlForm As Form, ByVal Stato As Integer)
'Rende invisibili i controlli che nel Form hanno -Nn- nella proprietà TAG, visibili quelli
' che hanno -Vn- dove 'n' è il numero dello stato e ignora i restanti
'Parimenti blocca i controlli con -BLn- e sblocca quelli con -SBn- dove n è lo stato e ignora quelli che
' non hanno specifiche x questo stato
Dim F As Form = DirectCast(IlForm, Form)
Dim Ct As Control
For Each Ct In F.Controls
CicloXVisibilitàSecondoLoStato(Ct, Stato)
CicloXAttivazioneSecondoLoStato(Ct, Stato)
Next
End Sub
Private Shared Sub CicloXVisibilitàSecondoLoStato(ByRef ct As Control, ByVal stato As Integer)
Dim CtlFiglio As Control = Nothing
MostraONascondeIlControllo(ct, stato)
For Each CtlFiglio In ct.Controls
'CicloXBlocco(CtlFiglio)
'MostraONascondeIlControllo(CtlFiglio, stato)
CicloXVisibilitàSecondoLoStato(CtlFiglio, stato)
Next
End Sub
Private Shared Sub CicloXAttivazioneSecondoLoStato(ByRef ct As Control, ByVal stato As Int32)
Dim CtlFiglio As Control = Nothing
BloccaOSbloccaIlControllo(ct, stato)
For Each CtlFiglio In ct.Controls
'CicloXBlocco(CtlFiglio)
'BloccaOSbloccaIlControllo(CtlFiglio, stato)
CicloXAttivazioneSecondoLoStato(CtlFiglio, stato)
Next
End Sub
End Class