LIMPAR TODOS OS CAMPOS SOMENTE DA TAB SELECIONADA
Public Sub LimparCampos(Formulario As Form)
Dim obj As Control
For Each obj In Formulario.Controls
If TypeOf obj Is MaskEdBox Then
obj.PromptInclude = False
obj.Text = [Ô][Ô]
End If
If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Then
obj.Text = [Ô][Ô]
End If
Next
End Sub
O código acima me permite limpar todos os campos de todos os tipos de um formulário, porém eu tenho um form que possui um SStab com 3 tabs e eu quero limpar somente os campos onde Sstab1.tab = 0, pois da maneira que está o código ele limpa todos os campos de todas as Tabs. Agradeço antecipado quem puder me ajudar
Dim obj As Control
For Each obj In Formulario.Controls
If TypeOf obj Is MaskEdBox Then
obj.PromptInclude = False
obj.Text = [Ô][Ô]
End If
If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Then
obj.Text = [Ô][Ô]
End If
Next
End Sub
O código acima me permite limpar todos os campos de todos os tipos de um formulário, porém eu tenho um form que possui um SStab com 3 tabs e eu quero limpar somente os campos onde Sstab1.tab = 0, pois da maneira que está o código ele limpa todos os campos de todas as Tabs. Agradeço antecipado quem puder me ajudar
Bom, como meus amigos não tiveram a solução eu andei batendo a cabeça até criar uma solução temporária até aparecer algo mais simples, segue o código caso alguem precise:
Public Sub LimparCampos(IndiceI, IndiceF As Integer, Formulario As Form)
[ô]Explicação:
[ô]IndiceI é o Ãndice inicial do controle e IndiceF é o Ãndice final do controle
[ô]Para eu limpar somente um intervalo de Ãndice eu vejo o intervalo que desejo e informo na
[ô]hora de chamar a função. No meu caso como eu tenho 3 Tabs, eu pego os Ãdices inicial até
[ô]o Ãdice final dentro do meu tab, assim ele somente limpa os campos nesse intervalo fazendo
[ô]com que os campos que estao em outras tabs continuem preenchidos
Dim obj As Control
Dim tabula As Integer
For Each obj In Formulario.Controls
tabula = obj.TabIndex [ô]pego o indice de tabulação do objeto
If tabula >= IndiceI And tabula <= IndiceF Then [ô]vejo se o Ãndice ta no intervalo q qro
If TypeOf obj Is MaskEdBox Then [ô]Certifico se é um campo de mascara
obj.PromptInclude = False
obj.Text = [Ô][Ô]
End If
If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Then [ô]Vejo se é texto ou combo
obj.Text = [Ô][Ô]
End If
End If
Next
[ô]Como o FOR EACH não procura os objetos em ordem de tabulção, tive que criar outro FOR
[ô]EACH para ver o objeto que desejo que ganhe foco depois de eu limpar todos os campos
For Each obj In Formulario.Controls
tabula = obj.TabIndex
If tabula = IndiceI Then [ô]Vejo o Ãndice inicial (primeiro objeto do meu SSTab) e dou foco nele
obj.SetFocus
Exit For
End If
Next
End Sub
[ô][ô]PRA CHAMAR
[ô]No meu caso, como tenho 3 Tabs, fiz assim:
If SSTCondominio.Tab = 0 Then
Call LimparCampos(0, 6, FrmCondominio)
Else
If SSTCondominio.Tab = 1 Then
Call LimparCampos(17, 38, FrmCondominio)
Else
Call LimparCampos(49, 61, FrmCondominio)
End If
End If
End Sub
Public Sub LimparCampos(IndiceI, IndiceF As Integer, Formulario As Form)
[ô]Explicação:
[ô]IndiceI é o Ãndice inicial do controle e IndiceF é o Ãndice final do controle
[ô]Para eu limpar somente um intervalo de Ãndice eu vejo o intervalo que desejo e informo na
[ô]hora de chamar a função. No meu caso como eu tenho 3 Tabs, eu pego os Ãdices inicial até
[ô]o Ãdice final dentro do meu tab, assim ele somente limpa os campos nesse intervalo fazendo
[ô]com que os campos que estao em outras tabs continuem preenchidos
Dim obj As Control
Dim tabula As Integer
For Each obj In Formulario.Controls
tabula = obj.TabIndex [ô]pego o indice de tabulação do objeto
If tabula >= IndiceI And tabula <= IndiceF Then [ô]vejo se o Ãndice ta no intervalo q qro
If TypeOf obj Is MaskEdBox Then [ô]Certifico se é um campo de mascara
obj.PromptInclude = False
obj.Text = [Ô][Ô]
End If
If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Then [ô]Vejo se é texto ou combo
obj.Text = [Ô][Ô]
End If
End If
Next
[ô]Como o FOR EACH não procura os objetos em ordem de tabulção, tive que criar outro FOR
[ô]EACH para ver o objeto que desejo que ganhe foco depois de eu limpar todos os campos
For Each obj In Formulario.Controls
tabula = obj.TabIndex
If tabula = IndiceI Then [ô]Vejo o Ãndice inicial (primeiro objeto do meu SSTab) e dou foco nele
obj.SetFocus
Exit For
End If
Next
End Sub
[ô][ô]PRA CHAMAR
[ô]No meu caso, como tenho 3 Tabs, fiz assim:
If SSTCondominio.Tab = 0 Then
Call LimparCampos(0, 6, FrmCondominio)
Else
If SSTCondominio.Tab = 1 Then
Call LimparCampos(17, 38, FrmCondominio)
Else
Call LimparCampos(49, 61, FrmCondominio)
End If
End If
End Sub
Porque você não coloca apenas neste formulário o mesmo código adaptado para o ssTab?
Fica inviável, se eu entendi sua pergunta. A funçao pra limpar campos eu deixo ele em Module, pois tenho um projeto com diversas telas, então eu apenas chamo a função passando os parâmetros da tela em questão, e quando a tela contiver, como a minha, 3 Sstab's eu faço como no exemplo acima.
Olá,
Tenta assim:
1° Coloca um Frame em cada Tab;
2° Move os controles de cada Tab para dentro do Frame respectivo;
3° Cola esse código num módulo:
4° Chame o procedimento, exemplos:
Bem, foi o que eu consegui bolar em 5 minutos .... testa ai e posta o resultado ....
Flw ... FICA COM DEUS!!!
Tenta assim:
1° Coloca um Frame em cada Tab;
2° Move os controles de cada Tab para dentro do Frame respectivo;
3° Cola esse código num módulo:
Public Sub LimparCampos(Formulario As Form, Optional ByVal ApenasUmFrame As Object)
Dim obj As Control
If Not ApenasUmFrame Is Nothing Then
For Each obj In Formulario.Controls
If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Or obj Is MaskEdBox Then
If obj.Container.Name = ApenasUmFrame.Name Then
If TypeOf obj Is MaskEdBox Then obj.PromptInclude = False [ô]Certifico se é um campo de mascara
obj.Text = [Ô][Ô]
End If
End If
Next
Else
For Each obj In Formulario.Controls
If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Or obj Is MaskEdBox Then
If TypeOf obj Is MaskEdBox Then obj.PromptInclude = False [ô]Certifico se é um campo de mascara
obj.Text = [Ô][Ô]
End If
Next
End If
End Sub
4° Chame o procedimento, exemplos:
[ô]Limpa tudo
Private Sub Command1_Click()
LimparCampos Me
End Sub
[ô]Limpa apenas o Frame1
Private Sub Command1_Click()
LimparCampos Me, Frame1
End Sub
Bem, foi o que eu consegui bolar em 5 minutos .... testa ai e posta o resultado ....
Flw ... FICA COM DEUS!!!
Blz, valeu...
Tópico encerrado , respostas não são mais permitidas