LIMPAR TODOS OS CAMPOS SOMENTE DA TAB SELECIONADA

ADEMIRBP 02/05/2011 14:54:22
#372985
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
ADEMIRBP 02/05/2011 16:35:38
#372997
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
ADRIANOM 03/05/2011 09:01:49
#373034
Porque você não coloca apenas neste formulário o mesmo código adaptado para o ssTab?
ADEMIRBP 03/05/2011 09:27:55
#373042
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.
EXPERT 03/05/2011 10:19:21
#373063
Resposta escolhida
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:

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!!!
ADEMIRBP 03/05/2011 14:36:42
#373094
Blz, valeu...
Tópico encerrado , respostas não são mais permitidas