DUVIDA: DEIXAR CAMPO TEXTBOX SELECIONAVEL
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
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
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:
Caso o programa não reconheça o Panel1, troque:
Por:
é isso aÃ.
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Ã.
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
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
[Ô]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..
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..
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
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
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)
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)
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 ...?
Primeiro tenho que encerrar o tópico? ai vai aparecer a opção para eu avaliar, é isso?
isso mesmo. Clica em encerrar que vai aparecer os nomes, ai é só você escolher quem lhe ajudou.
vlw
vlw
Tópico encerrado , respostas não são mais permitidas