VB.net - Habilitando e desabilitando controles automaticamente
Autor: Sérgio Queiroz | Publicado: 2016-07-19T21:42:00-03:00

Olá PessoALL,

acabei de desenvolver esta rotina e acho que pode ser bem útil para muitos desenvolvedores, ela consiste em habilitar e desabilitar os controles de um formulário automaticamente, está rotina deve ser colocada dentro de um módulo, verifiquem e deixem seus comentários.

Boa sorte.

<!-- HTML generated using hilite.me -->


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Module Bloquear    
    Public Sub BloquearCamposTela(pForm As Form, pTipoCampo() As String, pStatus As Boolean, pExcecoes() As String)
        'Utilização
        '----------
        'Bloqueia ou libera os campos da de um formulário passado como parâmentro (pForm)
        'Os campos que não podem ser bloqueados devem ser inseridos como array no parâmetro pExcecoes utilizando o seu nome
        'Deve ser informado se os campos serão bloqueados ou liberados no parâmetro pStatus

        'Parâmetros
        '----------
        'pForm: Form - Formulário que possui os controles 
        'pTipoCampo: Array - Contém os nomes dos controles [windows.forms] ex: {"TextBox","ListBox"}
        'pStatus: Booleano - Status da propriedade enabled dos controles, "True" Bloqueia e "False" não faz nada
        'pExcecoes: Array - Contém os nomes do controles [propriedade name] ex: {"Txt_Nome_Usuario","Btn_Salvar"}

        'Exemplo
        '-------
        'BloquearCamposTela(Me, {"TextBox", "ListBox", "Button"}, True, {"Txt_Nome_Usuario","Btn_Salvar"})
        'No exemplo acima serão bloqueados todos os objetos TextBox, ListBox e Button
        'e não bloquear os controles cujo nome sejam Txt_Nome_Usuario e Btn_Salvar
        '------------------------------------------------------------------------------
        Dim NaoBloqueia As Boolean

        For Each Ctl As Control In pForm.Controls
            NaoBloqueia = False
            For x = 0 To pExcecoes.Count - 1
                If UCase(Ctl.Name) = UCase(pExcecoes(x)) Then
                    NaoBloqueia = True
                End If
            Next
            If Not NaoBloqueia Then
                vCtlName = UCase(Ctl.GetType.Name)
                'Pesquiso se no array pTipoCampo a existência do controle encontrado
                '-------------------------------------------------------------------
                Dim Encontrou As String = Array.Find(pTipoCampo, AddressOf EncontrarNoArray)

                If Encontrou &lt;&gt; Nothing Then
                    Ctl.Enabled = Not pStatus
                End If
                '-------------------------------------------------------------------
            End If
        Next
    End Sub

    Public Function EncontrarNoArray(ByVal pStr As String) As Boolean
        'Exemplo:
        'Dim Encontrou As String = Array.Find(pTipoCampo, AddressOf EncontrarNoArray)
        'If Encontrou &lt;&gt; Nothing Then
        '    &lt;code...&gt;
        'End If
        'Onde pTipoCampo é um array
        '----------------------------------------------------------------------------
        Return IIf(UCase(pStr).EndsWith(vCtlName), True, False)
    End Function

End Module