Veja nesta dica como fazer suas variáveis trabalharem como flags. Os enums sempre foram muito úteis para auxiliar a escrita do código e criação de componentes. Agora em .NET podemos utilizar variáveis Enum na forma de flags.

Variáveis utilizadas na forma de flags permitem a inserção de vários valores combinados que irão funcionar como um flag ligado/desligado. Por exemplo, as opções de configuração de um msgbox nesta instrução são flags, que podem ser somados para definir a configuração final.

O .NET possui um atributo chamado flags que transforma um Enum em um conjunto de flags. Veja como funciona :


            <Flags()> Public Enum teste

                x = 1
                
                y = 2
                
                z = 4
                
                w = 8
                
                End Enum
        

Observe que os valores na criação deste Enum não são seqüenciais. Cada valor é igual a soma dos anteriores + 1. Esse Enum poderá conter inúmeras combinações. Vamos então testar todas as combinações possíveis. Observe que todas as combinações possíveis só serão obtidas se a regra acima (numeração dos elementos) tiver sido obedecida.


            Dim i As Integer

            Dim t As teste
            
            For i = 1 To 15
            
              t = i
            
              MsgBox(t.ToString)
            
            Next
        

O laço vai do valor do primeiro elemento até o valor do último elemento * 2 - 1. A atribuição de valores no enum pode ser uma soma simples. Veja como fica:


            Dim t As teste

            t = teste.w Or teste.x Or teste.y
            
            t = teste.w + teste.x + teste.y
            
            MsgBox(t.ToString)
        

Observe que fiz a mesma atribuição de duas formas diferentes, apenas por demonstração. Existe apenas uma diferença entre as duas formas: Quando digitamos OR o menu do intelissence é aberto, quando digitamos + isso não ocorre. Um detalhe interessante é que isso ocorre em qualquer flag, inclusive os do msgBox.

Por fim vamos ver como testar se um determinado valor da variável contém um determinado elemento único do Enum. Vamos colocar uma TextBox em um formulário e utilizar o seguinte código:


            Dim t As teste

            t = TextBox1.Text
            
            If t And 2 Then
            
              MsgBox("O valor contém y")
            
            Else
            
              MsgBox("O valor não contém y")
            
            End If
        

Observe que quando utilizando AND ou OR, como nos dois exemplos, estamos utilizando operações bit a bit (bitwise operations).