Array
(
)

Recuperar controles de uma página com master page.

Hal9000
   - 01 jun 2008

Olá a todos.

Montei uma rotina no meu sistema que percorre todos os controles de uma pagina e habilita ou desabilita eles ´Enabled´ funcionava que é uma beleza, mas o pessoal do design meteu uma masterpage e agora o código não recupera mais! Alguem sabe como eu faço para referenciar esses controles que agora estão numa página com master page?

Hal9000
   - 01 jun 2008

Nãi é possível passei a manhã no google e nada! Como eu consigo fazer um for each para pegar todos os controles que estão na minha página com Master Page? Já use Master, ContentPlaceHolder! Tudo! Alguém sabe?!?!

Ricardo Silva
   - 02 jun 2008

veio....

qndo vc coloca uma masterPage... os nome do Documentos HTML muda um poquim...

pra descobrir os Novos nome, vc executa o seu projeto e vai no codigo fonte do seu HTML.
provavelmente ele vai estar assim: ctl00_ContentPlaceHolder1_TextBox1, o que muda é o nome do do ContentPlaceHouder que armazena todos os controles

na duvida soh posta

Hal9000
   - 02 jun 2008

Então. esse lance de mudar o nome dos controles eu já to por dentro.

o meu problema é que preciso de um método genérico que percorra todos os controles da minha página.

eu fiz assim e sem master funciona:

#Código
Public Sub DesligaSubmit(ByVal Pagina As Page)
For Each Controle As Control In Pagina.Controls
If TypeOf Controle Is Button Then
Dim Botao As New Button
Botao = DirectCast(Controle, Button)
Botao.UseSubmitBehavior = False
End If
Next
End Sub


Eu passo a página e quero recuperar os controles, mas na master a coleção de controles vem com um único item. a própria master :(

Ricardo Silva
   - 02 jun 2008

se eu não me engano.. vc vai ter q colocar outro lupe dentro desse foreach. tipo assim... na sua pagina ele vai encontar um controle que eh o ContentPlaceHolder, os controles estão dentro deles.
#Código
Public Sub DesligaSubmit(ByVal Pagina As Page)
For Each Controle As Control In Pagina.Controls
For Each Ctr As Control In Controle
If TypeOf Ctr Is Button Then
Dim Botao As New Button
Botao = DirectCast(Ctr, Button)
Botao.UseSubmitBehavior = False
End If
Next
Next
End Sub


não manjo nada de VB mais axo qw ficaria assim, pois fiz algo parecido em C# na facu... ve se da certo e posta ai....
Ah outra dica, é ir debugando e procurando os Objetos ai fica facil

na duvida soh posta

Hal9000
   - 02 jun 2008

Testei sua idéia Rica mas o tipo Control não é um Array de controles

entao a linha:

For Each Ctr As Control In Controle dá pau
:(

Alguma idéia nova? Eu continuo procurando...

Ricardo Silva
   - 03 jun 2008

entaum no lugar de for each faz simplesmente um for...
#Código
Public Sub DesligaSubmit(ByVal Pagina As Page)
For Each Controle As Control In Pagina.Controls
For(int i = 0; i > Controle.count - 1; i++)
If TypeOf Controle[i] Is Button Then
Dim Botao As New Button
Botao = DirectCast(Controle[i], Button)
Botao.UseSubmitBehavior = False
End If
Next
Next
End Sub


ja... sei meu for ta em C (rsrsrsr) não sei como é em VB
mas creio q seja assim, pois se o componente não for uma coleção o count dele sera 1 logo ele vai pro proximo controle ateh axar uma coleção ai ele netra no for... e sucetivamente.

tenta lah....

Hal9000
   - 03 jun 2008

Olha só testei com um for ´simples´

#Código
For Each Controle As Control In Pagina.Controls
For ind = 0 To Controle.Controls.Count - 1
If TypeOf Controle.Controls(ind) Is Button Then
Dim Botao As New Button
Botao = DirectCast(Controle.Controls(ind), Button)
Botao.UseSubmitBehavior = False
End If
Next
Next


Mas passa batido rs.
Vou tentar passar o ContentPlaceHolder ao invés da página...

Mas só para constar:

o For do VB é bem mais elegante... rs :wink:

For ind = 0 To Controle.Controls.Count - 1

Ok ok.. Os dois fazem a mesma coisa...

Vou testar e volto a postar...

Hal9000
   - 05 jun 2008

Rica.. Resolvi o problema. Vc tinha razão quanto a pesquisar a controles dentro de controles, mas para funcionar tem que usar recursividade.

olha só:

#Código
Public Sub DesligaSubmit(ByVal Pagina As Control)
For Each Controle As Control In Pagina.Controls
If TypeOf Controle Is Button Then
Dim Botao As New Button
Botao = DirectCast(Controle, Button)
Botao.UseSubmitBehavior = False
Else
´RECURSIVIDADE AQUI
DesligaSubmit(Controle)
End If
Next
End Sub


Valeu pela ajuda...

Ricardo Silva
   - 05 jun 2008

Ah... muleeeeeque...

é issso ai...
fiquei morrendo de medo de mandar vc usar recurssividade pra vc naum assusta - vai q vc manda eu vazer um exemplo VB (rsrsrs)- mas é isso ai.... vc vez certim.

Parabens...

Hal9000
   - 05 jun 2008

Rica, segue post para o pessoal do C# num ficar brabo comigo.. rs

#Código
public void DesligaSubmit(Control Pagina)
{
foreach (Control Controle in Pagina.Controls) {
if (Controle is Button) {
Button Botao = new Button();
Botao = (Button)Controle;
Botao.UseSubmitBehavior = false;
}
else {
//RECURSIVIDADE AQUI
DesligaSubmit(Controle);
}
}
}