APAGAR VARIOS TEXTBOX ESPECIFICOS OU DE GROUPBOX
Bom dia.
Conclui minha aplicação. Depois de te-la concluido, percebi que ao trocar de estado os dados preenchidos ficam preenchidos, desta forma o usuário teria que apagar para preencher com os novos dados. Eu gostaria, que ao trocar de estado no combobox, as informações fossem apagadas, porém não todos os texbox do formulário, mas alguns especÃficos. Coloquei uma função de apagar no evendo do combobox. Para ficar fácil de compreender coloquei um print. No print o user acabou de preencher e clicou no botão calcular, agora ao mudar de estado, gostaria que o formulário fosse tipo resetado, ou seja como se ele tivesse sido aberto.
A função que eu fiz não estava apagando todos os TEXTBOX não entendi o motivo. Para ficar fácil deixei comentado a parte que não ta apagando.
Private Sub COMBOBOX1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles COMBOBOX1.SelectedIndexChanged
Sub ClearCtrl1()
realizado1.ResetText()
realizado2.ResetText()
realizado3.ResetText()
realizado4.ResetText()
realizado5.ResetText()
realizado6.ResetText()
total_vendas.ResetText()
desconto1.ResetText()
desconto2.ResetText()
base_calculo.ResetText()
aliquota1.ResetText()
aliquota2.ResetText()
gerente.ResetText()
vendedor.ResetText()
soma_realizados.ResetText()
[ô]soma_realizados2.ResetText()
[ô]dif_realizados.ResetText()
[ô]dif_realizados2.ResetText()
[ô]dif_objetivos.ResetText()
[ô]dif_objetivos2.ResetText()
[ô]deb_anterior.ResetText()
[ô]deb_atual.ResetText()
[ô]dif_debito1.ResetText()
[ô]dif_debito2.ResetText()
[ô]End Sub
Eu também estava testando:
Public Sub Clear1()
Dim ctl As Control
For Each ctl In GROUPBOX1.Controls
If TypeOf ctl Is TextBox Then
DirectCast(ctl, TextBox).Text = String.Empty
ElseIf ctl.Controls.Count > 0 Then
Clear1()
End If
Next
End Sub
Conclui minha aplicação. Depois de te-la concluido, percebi que ao trocar de estado os dados preenchidos ficam preenchidos, desta forma o usuário teria que apagar para preencher com os novos dados. Eu gostaria, que ao trocar de estado no combobox, as informações fossem apagadas, porém não todos os texbox do formulário, mas alguns especÃficos. Coloquei uma função de apagar no evendo do combobox. Para ficar fácil de compreender coloquei um print. No print o user acabou de preencher e clicou no botão calcular, agora ao mudar de estado, gostaria que o formulário fosse tipo resetado, ou seja como se ele tivesse sido aberto.
A função que eu fiz não estava apagando todos os TEXTBOX não entendi o motivo. Para ficar fácil deixei comentado a parte que não ta apagando.
Private Sub COMBOBOX1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles COMBOBOX1.SelectedIndexChanged
Sub ClearCtrl1()
realizado1.ResetText()
realizado2.ResetText()
realizado3.ResetText()
realizado4.ResetText()
realizado5.ResetText()
realizado6.ResetText()
total_vendas.ResetText()
desconto1.ResetText()
desconto2.ResetText()
base_calculo.ResetText()
aliquota1.ResetText()
aliquota2.ResetText()
gerente.ResetText()
vendedor.ResetText()
soma_realizados.ResetText()
[ô]soma_realizados2.ResetText()
[ô]dif_realizados.ResetText()
[ô]dif_realizados2.ResetText()
[ô]dif_objetivos.ResetText()
[ô]dif_objetivos2.ResetText()
[ô]deb_anterior.ResetText()
[ô]deb_atual.ResetText()
[ô]dif_debito1.ResetText()
[ô]dif_debito2.ResetText()
[ô]End Sub
Eu também estava testando:
Public Sub Clear1()
Dim ctl As Control
For Each ctl In GROUPBOX1.Controls
If TypeOf ctl Is TextBox Then
DirectCast(ctl, TextBox).Text = String.Empty
ElseIf ctl.Controls.Count > 0 Then
Clear1()
End If
Next
End Sub
Em vez de colocar a propriedade ResetText você poderia tentar colocar assim:
realizado1.Text = [Ô][Ô]
E assim por diante.
realizado1.Text = [Ô][Ô]
E assim por diante.
Eu já havia testado assim, o resultado foi o mesmo. Eu percebo que quando mudo a ordem das texbox, algums deixam de ser apagadas além das mencionadas. Pode ser que eu não esteja sabendo onde colocar a função, tentei colocá-la no inicio da aplicação, e testei colocá-la no final.
Olá boa noite.
Veja se este exemplo serve.
Espero ter ajudado.
Atenciosamente
Programadorvb6
Veja se este exemplo serve.
=============
== Na Classe ==
=============
Public Class Procedimentos
Public Enum Limpa_Controle
Todos = 0
TextBox = 1
ComboBox = 2
MaskedTextBox = 3
DateTimePicker = 4
End Enum
Public Property Limpeza As New Limpa_Controle
Public Sub LimpaCampos(ByVal c As Control, ByRef Limpeza As Limpa_Controle)
[ô] Percorre a coleção de controles de c.
Select Case Limpeza
Case Limpa_Controle.Todos
For Each ctr As Control In c.Controls
[ô] Verifica se o controle tem controles filhos;
[ô] se tiver, percorre a coleção.
If (ctr.Controls.Count > 0) Then
Call LimpaCampos(ctr, Limpa_Controle.Todos)
End If
[ô] Se encontrar um TextBox, limpa.
If (TypeOf ctr Is TextBox) Then
Dim t As TextBox = DirectCast(ctr, TextBox)
t.Text = String.Empty
End If
[ô] Se encontrar um ComboBox, limpa.
If (TypeOf ctr Is ComboBox) Then
Dim t As ComboBox = DirectCast(ctr, ComboBox)
t.Text = String.Empty
End If
If (TypeOf ctr Is MaskedTextBox) Then
Dim t As MaskedTextBox = DirectCast(ctr, MaskedTextBox)
t.Clear()
End If
If (TypeOf ctr Is DateTimePicker) Then
Dim t As DateTimePicker = DirectCast(ctr, DateTimePicker)
t.Value = Today
End If
[ô] Coloque aqui mais controles
[ô]...
Next
[ô]=================[ Individual : Texbox ]===================
Case Limpa_Controle.TextBox
For Each ctr As Control In c.Controls
[ô] Verifica se o controle tem controles filhos;
[ô] se tiver, percorre a coleção.
If (ctr.Controls.Count > 0) Then
Call LimpaCampos(ctr, Limpa_Controle.TextBox)
End If
[ô] Se encontrar um TextBox, limpa.
If (TypeOf ctr Is TextBox) Then
Dim t As TextBox = DirectCast(ctr, TextBox)
t.Text = String.Empty
End If
Next
[ô]=================[ Individual : Combobox ]===================
Case Limpa_Controle.ComboBox
For Each ctr As Control In c.Controls
[ô] Verifica se o controle tem controles filhos;
[ô] se tiver, percorre a coleção.
If (ctr.Controls.Count > 0) Then
Call LimpaCampos(ctr, Limpa_Controle.ComboBox)
End If
[ô] Se encontrar um Combobox, limpa.
If (TypeOf ctr Is ComboBox) Then
Dim t As ComboBox = DirectCast(ctr, ComboBox)
t.Text = String.Empty
End If
Next
[ô]=================[ Individual : Maskedbox ]===================
Case Limpa_Controle.MaskedTextBox
For Each ctr As Control In c.Controls
[ô] Verifica se o controle tem controles filhos;
[ô] se tiver, percorre a coleção.
If (ctr.Controls.Count > 0) Then
Call LimpaCampos(ctr, Limpa_Controle.MaskedTextBox)
End If
[ô] Se encontrar um Maskedbox, limpa.
If (TypeOf ctr Is MaskedTextBox) Then
Dim t As MaskedTextBox = DirectCast(ctr, MaskedTextBox)
t.Clear()
End If
Next
[ô]=================[ Individual : DateTimePicker ]===================
Case Limpa_Controle.DateTimePicker
For Each ctr As Control In c.Controls
[ô] Verifica se o controle tem controles filhos;
[ô] se tiver, percorre a coleção.
If (ctr.Controls.Count > 0) Then
Call LimpaCampos(ctr, Limpa_Controle.DateTimePicker)
End If
[ô] Se encontrar um DateTimePicker, limpa.
If (TypeOf ctr Is DateTimePicker) Then
Dim t As DateTimePicker = DirectCast(ctr, DateTimePicker)
t.Value = Today
End If
Next
End Select
End Sub
End Class
=============
== No Módulo ===
=============
Module DefGlobais
Public ObjProcedimentos As New Procedimentos
End Module
=============
== No Form ===
=============
[ô]Apagar para Todos os controles :
ObjProcedimentos.LimpaCampos(Me, Procedimentos.Limpa_Controle.Todos)
[ô]Especificar [ô]Apagar[ô] para um só controle :
ObjProcedimentos.LimpaCampos(Me, Procedimentos.Limpa_Controle.TextBox)
Espero ter ajudado.
Atenciosamente
Programadorvb6
Olá Programador,
Boa noite!
Meu amigo muito obrigado pela ajuda. Pelo que eu entendi o código acima limpa tudo certo? O que eu precisava era um de algo que limpasse alguns TEXTBOX especÃficos e não todos, pois alguns tem texto fixo. Posso separar os TEXTBOX que deverão ser apagados em GROUPBOX especÃficos.
A Aplicação é uma calculadora. Posso postar o projeto completo aqui se achar necessário. No post acima dá pra ter uma ideia. O usuário seleciona o trimestre, e logo após seleciona o estado. Após selecionar o estado, o código escreve os objetivos de vendas e de visitas para cada estado. A partir daà o usuário digita as vendas realizadas nos perÃodos, as visitas realizadas no perÃodo, e também a inadimplencia atual e anterior.
Ao pressionar o botão calcular, a aplicação faz o calculo da gratificação para gerentes e vendedores. O projeto está praticamente pronto e funcionando perfeitamente, o que eu gostaria era que ao trocar a informação no COMBOBOX, seja estado ou trimestre, as informações fossem apagadas, para que o usuário não precisasse apagar de forma manual.
Os códigos que postei acima, funcionaram parcialmente, eu não entendi o motivo, mas apenas alguns dos TEXTBOX são apagados não todos. São 24 TEXTBOX que deveriam ser limpos mas apenas 15 estão sendo apagados. Desde já agradeço.
Boa noite!
Meu amigo muito obrigado pela ajuda. Pelo que eu entendi o código acima limpa tudo certo? O que eu precisava era um de algo que limpasse alguns TEXTBOX especÃficos e não todos, pois alguns tem texto fixo. Posso separar os TEXTBOX que deverão ser apagados em GROUPBOX especÃficos.
A Aplicação é uma calculadora. Posso postar o projeto completo aqui se achar necessário. No post acima dá pra ter uma ideia. O usuário seleciona o trimestre, e logo após seleciona o estado. Após selecionar o estado, o código escreve os objetivos de vendas e de visitas para cada estado. A partir daà o usuário digita as vendas realizadas nos perÃodos, as visitas realizadas no perÃodo, e também a inadimplencia atual e anterior.
Ao pressionar o botão calcular, a aplicação faz o calculo da gratificação para gerentes e vendedores. O projeto está praticamente pronto e funcionando perfeitamente, o que eu gostaria era que ao trocar a informação no COMBOBOX, seja estado ou trimestre, as informações fossem apagadas, para que o usuário não precisasse apagar de forma manual.
Os códigos que postei acima, funcionaram parcialmente, eu não entendi o motivo, mas apenas alguns dos TEXTBOX são apagados não todos. São 24 TEXTBOX que deveriam ser limpos mas apenas 15 estão sendo apagados. Desde já agradeço.
Você não tem nenhum código que altera o valor do textbox quando o texto de algum outro é alterado, por exemplo no evento TextChanged?
Segue projeto completo para sua avaliação.
Seleciona o perÃodo por exemplo: 1º trimestre
Selecione o estado por exemplo: BA
Preencha os campos:
Vendas nos 3 perÃodos por exemplo: 80.000 nos 3 perÃodos
Visitas nos 3 perÃodos por exemplo: 30 nos 3 perÃodos
Inadimplencia anterior e atual preencha: 10.000 em ambos
E pressione em calcular.
A formula trará um valor para a gratificação de gerente e vendedor.
Depois disso, troque a Unidade (estado) para por exemplo CE.
Com essa troca eu gostaria que limpasse as informações, de modo que o formulário voltasse ao mesmo estado de quando foi aberto.
Abraços.
Seleciona o perÃodo por exemplo: 1º trimestre
Selecione o estado por exemplo: BA
Preencha os campos:
Vendas nos 3 perÃodos por exemplo: 80.000 nos 3 perÃodos
Visitas nos 3 perÃodos por exemplo: 30 nos 3 perÃodos
Inadimplencia anterior e atual preencha: 10.000 em ambos
E pressione em calcular.
A formula trará um valor para a gratificação de gerente e vendedor.
Depois disso, troque a Unidade (estado) para por exemplo CE.
Com essa troca eu gostaria que limpasse as informações, de modo que o formulário voltasse ao mesmo estado de quando foi aberto.
Abraços.
Faça o seguinte:
1. Acesse a guia Properties dos controles TEXTBOX, e altere o valor da propriedade TAG para 1, somente dos controles que se deseja apagar;
2. Copie as linhas de código abaixo e cole no escopo do FORM em questão;
3. Por fim, faça a chamada a este método em alguma parte especÃfica do código e veja se resolve.
1. Acesse a guia Properties dos controles TEXTBOX, e altere o valor da propriedade TAG para 1, somente dos controles que se deseja apagar;
2. Copie as linhas de código abaixo e cole no escopo do FORM em questão;
Public Sub Clear3()
Dim ctl As Control
For Each ctl In limpar1.Controls
If TypeOf ctl Is TextBox Then
If CType(ctl, TextBox).Tag = [Ô]1[Ô] Then
CType(ctl, TextBox).Text = String.Empty
End If
End If
Next
End Sub
3. Por fim, faça a chamada a este método em alguma parte especÃfica do código e veja se resolve.
Se vc quer apagar de um group box expecÃfico:
vc chama a sub abaixo asim: LimparCampos(seu_groupbox)
Public Sub LimparCampos(ctlgroupbox as object)
For Each ctl In ctlgroupbox.Panel.Controls
If TypeOf ctl Is TextBox Then
ctl.Text = [Ô][Ô]
End If
Next
End Sub
vc chama a sub abaixo asim: LimparCampos(seu_groupbox)
Public Sub LimparCampos(ctlgroupbox as object)
For Each ctl In ctlgroupbox.Panel.Controls
If TypeOf ctl Is TextBox Then
ctl.Text = [Ô][Ô]
End If
Next
End Sub
Obrigado a Todos.
Tecla, o código da forma que você passou não funcionou, mas você a ideia que você passou sobre a Tag salvou a ficha. Abaixo o código que usei. Abraços.
ublic Sub Limpar(ByVal controlP As Control)
Dim ctl As Control
For Each ctl In controlP.Controls
If TypeOf ctl Is TextBox Then
If CType(ctl, TextBox).Tag = [Ô]1[Ô] Then
DirectCast(ctl, TextBox).Text = String.Empty
End If
ElseIf ctl.Controls.Count > 0 Then
Limpar(ctl)
End If
Next
End Sub
Tecla, o código da forma que você passou não funcionou, mas você a ideia que você passou sobre a Tag salvou a ficha. Abaixo o código que usei. Abraços.
ublic Sub Limpar(ByVal controlP As Control)
Dim ctl As Control
For Each ctl In controlP.Controls
If TypeOf ctl Is TextBox Then
If CType(ctl, TextBox).Tag = [Ô]1[Ô] Then
DirectCast(ctl, TextBox).Text = String.Empty
End If
ElseIf ctl.Controls.Count > 0 Then
Limpar(ctl)
End If
Next
End Sub
Tópico encerrado , respostas não são mais permitidas