DUVIDA DE OTIMIZAR CODIGO.

THIAGO.CC 17/11/2009 15:32:19
#327956
Fala galera do VBmania,

Estou querendo otimizar um codigo mais não sei se é possivel fazer isso, bom vou explicar.

Tenho uma função quer verifica se o checkbox esta selecionado ou não, passo como parametro o nome do check, por exemplo check1.

Só que estou mexendo em um software que existe muitos check[ô]s. Como eu posso otimizar este codigo para que eu não faça um por um.

Na função FUNC_Check_Obrigatorio esta passando o check como objeto.
Abaixo o codigo que eu utilizo, eu somente troco o nome:

If FUNC_Check_Obrigatorio(Check1) = False Then
FUNC_VALIDACAO = False
Exit Function
End If

A ideia é colocar o nome automatico, tentei fazer desta forma mais não dá certo.

Dim check As Control

For Each check In Me.Controls
If TypeOf check Is CheckBox Then
If FUNC_Check_Obrigatorio(check.Name) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Next


Alguém tem alguma sugestão de como fazer isso?

Abraços.
PH1959 17/11/2009 16:36:07
#327960
olha só... vc já pensou em indexar isso?
THIAGO.CC 17/11/2009 16:45:30
#327961
PH1959,

Então está com index, por exemplo esta em grupos

check1(1) ate check1(10).
check2(1) ate check2(10).
...
...
check10(1) ate check10(10).

compreende, por isso que eu tenho um função que checa se tem algum item checado.

Eu queria Otimizar isso.

pq da muito trabalho e o codigo fica gigantesco fazendo grupo por grupo.


HUGOSSOUZA 17/11/2009 17:57:11
#327985
Quando você executa essa função?

THIAGO.CC 17/11/2009 18:06:05
#327988
HUGOSSOUZA,

Esta função eu utilizo antes de salvar os registros.
Eu checo todos os objetos se estão checados antes de gravar no banco de dados.

Thiago
MARCELO.TREZE 17/11/2009 18:37:30
#327989
tenta assim

Dim CHK As Control

For Each CHK In Me.Controls
If TypeOf CHK Is CheckBox Then
If FUNC_Check_Obrigatorio(CHK) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Ne
xt
THIAGO.CC 18/11/2009 08:16:37
#328015
MARCELO-TREZE,

Já tinha tentado desta forma tb, só que ao passar pelo paramentro ele fica igual a ZERO e acaba gerando erro na função.

O ideal mesmo é passar como parametro o nome do objeto.

Thiago.
MARCELO.TREZE 18/11/2009 09:20:53
#328021
posta sua função Check_Obrigatorio
ROBIU 18/11/2009 09:30:13
#328023
Não seria assim?

Sub VerCheck(F As Form)
Dim Check As Integer
For Check = 1 To F.Controls.Count - 1
If TypeOf F.Controls(Check) Is CheckBox Then
If F.Controls(Check).Value = 0 Then
MsgBox F.Controls(Check).Name & [Ô] - Não marcado[Ô]
Exit For
End If
End If
Next
End Sub


Veja exemplo anexo
THIAGO.CC 18/11/2009 09:54:19
#328029
MARCELO-TREZE,

Segue em anexo o codigo da função.

Public Function FUNC_Check_Obrigatorio(Check As Object) As Boolean
Dim iContador As Integer
Dim iQtde As Integer
Dim Checks_Habilitados As Integer

FUNC_Check_Obrigatorio = True

iQtde = 0
For iContador = 1 To Check.Count
If Check(iContador).Value = 1 Then
iQtde = iQtde + 1
End If
Next

Checks_Habilitados = 0
For iContador = 1 To Check.Count
If Check(iContador).Enabled Then
Checks_Habilitados = Checks_Habilitados + 1
End If
Next

If iQtde = 0 And Checks_Habilitados > 0 Then
For iContador = 1 To Check.Count
Check(iContador).BackColor = vbRed
Next
Call SUB_Exibir_Mensagem(msgCampoObrigatorio, Check(2))
FUNC_Check_Obrigatorio = False
End If

End Function


ROBIU,

Estou testando seu codigo ainda.

Mas obrigado pela ajuda por enquanto.

MARCELO.TREZE 18/11/2009 09:59:19
#328030
muda Object para Checkbox na sua Função

Public Function FUNC_Check_Obrigatorio(Check As Checkbox) As Boolean


e tente novamente o seu código da forma abaixo

Dim check As Control

For Each check In Me.Controls
If TypeOf check Is CheckBox Then
If FUNC_Check_Obrigatorio(check) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Next

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