Codigos Fonte, Artigos e Dicas
Percorrendo Todos TextBox

Essa técnica consiste em trabalhar com a classe Object e fazer Casting Seguro.
O código para percorrer todos os TextBox é o seguinte:
/* ------------------------------------------------------------- */
// O "varContainer" nesse caso é o Grid de WPF
// Mas pode ser um Panel.Controls por exemplo
// Na verdade a classe Grid é derivada da Panel
// O importante é obter uma Classe de Coleção chamada UIElementsCollections
/* ------------------------------------------------------------- */
foreach (object ob in varContainer.Children)
{
TextBox caixaTexto = ob as TextBox;
if (caixaTexto != null)
{
caixaTexto.Text = "S";
}
}
- Para cada objeto retornado do Array de Controles (UIElementCollection) a referência dele é colocada na variável ob (object)
- Com a variável ob referenciando um objeto fazemos o Casting Seguro com o operador “as“
- Se a variável caixaTexto (tipo TextBox) não for NULL o Casting foi executado com sucesso, isso quer dizer que o objeto pego no UIElementCollection realmente era um objeto do tipo TextBox e que a referência daquele objeto agora foi passada para a variável caixaTexto.
- Atribuímos “S” à propriedade Text do TextBox
P.S Não esqueçam de trocar o varContent pelo objeto que contém os TextBox na sua aplicação, pode ser por um Panel por exemplo. Você também pode trabalhar também com Labels, ComboBox, Buttons e etc é so fazer o Casting determinando o tipo desejado, use a sua imaginação.
O Que é esse Tal de Object?
Primeiro você deve entender o que é um tipo-referência, já entendido do assunto você agora tem que ter em mente que o tipo-referência mais importante no C# é o tipo OBJECT meu amigo…. que na verdade é um alias para System.Object!
Todos as classes existentes no C# são herdados do System.Object e uma variável tipo Object pode referenciar qualquer objeto existente!
Boxing
Quando você usa o Object para referenciar algo, você pode referenciar um tipo-valor
int numero = 8; object o = numero;
Valores do tipo int ficam na pilha da memória, o object fica no heap. Todas referências obrigatoriamente devem apontar para o heap e não para a pilha, se o C# permitisse criar referencia para a pilha poderíamos ter sérios problemas de segurança.
Então o runtime aloca uma parte da memória no heap copia o valor da variável numero e agora sim ele faz o objeto “o” referenciar o valor no heap, essa cópia automática de um valor na pilha para o heap é chamado de boxing.
Unboxing (casting)
Depois de fazer o Boxing naturalmente você gostaria em alguma hora devolver esse valor que está no heap para uma variável tipo-valor:
int numero = 8; object o = numero; int n2 = o; // ERRO!
Se tentar fazer isso você terá um erro em tempo de compilação, naturalmente isso não funcionará porque o compilador não confia em você!
Nós sabemos que o valor na variável “o” é equivalente a um inteiro, mas poderia ser qualquer outra coisa, como uma Classe criado por você, resumindo qualquer outra coisa mesmo! E isso não seria nada legal.
Para obter o valor referenciado pelo “o” será necessário fazer o unboxing (casting) dizendo o runtime que é seguro converter aquele valor referenciado, caso você esteja errado o casting lançará um exception (InvalodCastException), veja um exemplo:
int numero = 8; object o = numero; int n2 = (int)o; // Agora sim!
OBS: O boxing e unboxing são processos caros para o runtime, ele aloca bastante memória e faz muitas verificações, então procure não utilizar muito e utilize ele com atenção.
OBS2: Você deverá estar preparado para capturar o exception lançado e trata-lo corretamente aí entra os operadores “is” e “as” para amenizar o nosso sofrimento!
Casting de Dados Seguro
Operador is
Utilize o operador is para verificar se o tipo de objeto é o esperado:
int numero = 8;
object o = numero;
if(o is int){
int numero2 = (int)o; // Isso é seguro! o objeto "o" é um inteiro
}
Operador as
O operador is retorna true ou false já o operador as trabalha um pouco diferente.
Assim como o operador is no lado esquerdo recebe um objeto tipo-referência e à direita o tipo especificado. Se o casting for bem sucedido o operador “as” retornará o objeto se não retornará NULL.
int numero = 8;
object o = numero;
int numero2 = o as int;
if(numero2 != null){
Console.WriteLine("Casting OK!");
}
Até a próxima…
Posts Relacionados
| Imprimir artigo | Este artigo foi escrito por Alexandre Santos em 30 30UTC agosto 30UTC 2009 às 23:54, e está arquivado em Visual Studio 2008. Siga quaisquer respostas a este artigo através do RSS 2.0. Você pode deixar uma resposta ou fazer um trackback do seu próprio site. |

há 2 anos atrás
ja tinha feito post parecido kbçudo aiushaisuhaishaisuhasiuah
[Reply]