DUVIDA: DEIXAR CAMPO TEXTBOX SELECIONAVEL

JABA 10/08/2012 13:59:35
#407695
Eu acho que ja sei o que está acontecendo. Os controles que você está utilizando no Form estão sobre um Container. Desta forma, essa função só irá funcionar para os controles que estão para o Form diretamente (sem estar sobre container). Existe um forma de fazer para pegar os controles dentro do container também, mas fica muito mais dificil, pois terá que trabalhar com recursão no metodo.

Faça assim e veja se funciona:

Sub LimparControles(Obj as Object)

For Each ctrl as Control In Obj.Controls

If TypeOf ctrl Is TextBox Then

DirectCast(ctrl, TextBox).ReadOnly= True

ElseIf ctrl.Controls.Count > 0 Then

LimparControles(ctrl.Controls)

End If

Next

End Sub

Para usar: Sub LimparControles([Ô]SeuForm[Ô]) ou Sub LimparControles([Ô]SeuContainer[Ô])

Não esqueça de encerrar o tópico e pontuar quem lhe ajudou. vlw
PEGUDO 10/08/2012 14:29:41
#407699
Cara,
O raciocínio do JABA está correto, mas dá pra simplificar um pouco, veja:
Suponhemos que seu conteiner esteja nomeado como [Ô]Panel1[Ô]
então:
With Panel1
For Each Caixa As TextBox In .Controls.OfType(Of TextBox)
Caixa.ReadOnly = True
Next
End With

Caso o programa não reconheça o Panel1, troque:

With Panel1
For Each Caixa As TextBox In .Controls.OfType(Of TextBox)

Por:
With Tab1
For Each Caixa As TextBox In .Panel1.Controls.OfType(Of TextBox)

é isso aí.
JABA 10/08/2012 14:41:01
#407700
A forma que te passei é melhor Pegudo. Pois ele serve para qualquer container.

O problema de fazer assim como você está pensando, é que se você porventura vier a adicionar abas em um tabcontrol, você vai ter que fazer isso para cada tabpage.

A função que te passei ja serve para todas as tabpages e todos os containers que estiver no seu Form. Isso vai depender do parametro que você passar para o metodo. Ou seja, você poderia passar como parametro para a funcao somente o Panel, TabControl ou o TabPage, assim, ele vasculhará pelos controles somente no container que você passou como parametro.

vlw
TSANALISTA 10/08/2012 15:53:16
#407720
[Ô]Olá este exemplo parceiro não funcionou não rssrss

Sub LimparControles(Obj as Object)

For Each ctrl as Control In Obj.Controls

If TypeOf ctrl Is TextBox Then

DirectCast(ctrl, TextBox).ReadOnly= True

ElseIf ctrl.Controls.Count > 0 Then

LimparControles(ctrl.Controls)

End If

Next

End Sub

Para usar: Sub LimparControles([Ô]SeuForm[Ô]) ou Sub LimparControles([Ô]SeuContainer[Ô])
[Ô]
eu conseguir utilizando utilizando arrays...olhe ai o exemplo só que ainda não era esta forma que gostaria que ficasse, pois tive que declarar todas as tabPages nos arrays...afff trabalhoso demais:


Private Sub ControlaTextBox()
Dim vtextBoxes() As TextBox = {txt_Nome_TabP_DadosPrincipais, txt_Apelido__TabP_DadosPrincipais, txt_CPF_TabP_DadosPrincipais, txt_RG_TabP_DadosPrincipais, txt_InscMunicipal_TabP_DadosPrincipais, txt_InscSUFRAMA_TabP_DadosPrincipais, txt_OrgaoExpedidor_TabP_DadosPrincipais, txt_Endereco_TabP_DadosPrincipais, txt_CodigoIBGE_TabP_DadosPrincipais, txt_Numero_TabP_DadosPrincipais, txt_Bairro_TabP_DadosPrincipais, txt_CEP_TabP_DadosPrincipais, txt_Telefone_TabP_DadosPrincipais, txt_Celular_TabP_DadosPrincipais, txt_Fax_TabP_DadosPrincipais, txt_Responsavel_TabP_DadosPrincipais, txt_Email_TabP_DadosPrincipais, txt_Site_TabP_DadosPrincipais, txt_CodigoUsuario_TabP_DadosPrincipais}
Dim vMaskedBox() As MaskedTextBox = {Maskbx_Data_Nasc, MaskBx_DataCadastro_TabP_DadosPrincipais}
Dim vComboBox() As ComboBox = {cbx_UF_TabP_DadosPrincipais, cbx_Cidade_TabP_DadosPrincipais}
For Each item As TextBox In vtextBoxes
item.ReadOnly = True
Next

For Each item2 As MaskedTextBox In vMaskedBox
item2.ReadOnly = True
Next

For Each item3 As ComboBox In vComboBox
item3.Enabled = False
Next
End Sub

Assim deu certo mais queria que não precisasse ficar declarando as tabPages aff...mas agradeço a ajuda de todos..
TSANALISTA 10/08/2012 15:59:03
#407725
Todos os campos do formulário estão dentro de uma TabPage dessa forma aqui Jaba que você mostrou não funcionar, vejo o erro que dar:

Private Sub ToolStrip_Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStrip_Salvar.Click
If (MsgBox([Ô]Tem certeza que deseja salvar este Cadastro?[Ô], MsgBoxStyle.OkCancel, [Ô]Salvar Cadastro[Ô]) = MsgBoxResult.Ok) Then
Gravar()

[ô]ControlaTextBox()
LimparControles(tabp_DadosCadastrais)

End If

End Sub

JABA 10/08/2012 16:13:00
#407729
Mas cara, tem como fazer do jeito que estou falando. O caminho é esse.

Veja se assim Funciona:

Sub LimparControles(ByVal c as Control, ByVal recursivo as Boolean)

For Each ctrl as Control In c.Controls

If TypeOf ctrl Is TextBox Then

DirectCast(ctrl, TextBox).Text = String.Empty

ElseIf recursivo AndAlso ctrl.Controls.Count > 0 Then

LimparControles(ctrl, recursivo)

End If

Next

End Sub

=========================================================
Na hora de chamar --> LimparControles(tabp_DadosCadastrais, True)
TSANALISTA 11/08/2012 09:37:08
#407765
Ae......meu amigo funfou legal.. realmente está o que estava faltando este segundo parâmetro... vlw deu certo thank[ô]s.... e como eu faço para te dar uma avaliação ...?
TSANALISTA 11/08/2012 10:17:57
#407767
Primeiro tenho que encerrar o tópico? ai vai aparecer a opção para eu avaliar, é isso?
JABA 11/08/2012 16:32:22
#407777
isso mesmo. Clica em encerrar que vai aparecer os nomes, ai é só você escolher quem lhe ajudou.

vlw
Página 2 de 2 [19 registro(s)]
Tópico encerrado , respostas não são mais permitidas