GRAVAR DEPOIS DE VALIDAR [Ô]NOVAMENTE[Ô]

NILSONTRES 09/08/2013 17:38:28
#427356
Hum...
Olhei novamente, parece estar certo
Se quiser postar o codigo agente da uma olhada.
PROFESSOR 09/08/2013 20:30:19
#427366
A classe de validação apresentada, apesar de ser [Ô]enxuta[Ô] (valida apenas alguns tipos de controles, baseando-se na tag dos mesmos), funciona, desde que, por exemplo, o modelo do Option Explicit (sim, no VB.Net ainda existe isso) não tenha sido desmarcado. Explico: Como não há uma instrução de retorno explícita, sem a Option Explicit, usar [Ô]Validar = Retorno[Ô] interpreta-se como sendo a criação de uma variável interna, de nome [Ô]Validar[Ô], ainda que esse seja o mesmo nome que o da função. Não é apenas isto: O valor inicial de [Ô]Retorno[Ô] é [Ô]True[Ô], ou seja, se ocorrer algum erro durante o processamento da rotina, o [Ô]Catch[Ô] não altera esse valor, retornando [Ô]True[Ô] de forma bem inadequada.

Tente alterá-la para algo como:

Public Class Validador

Public Shared Property Title As String = [Ô]Empresa[Ô]

Private Shared msg As String = [Ô]O campo {0} é obrigatório.[Ô]

Public Shared Function Validar(ByVal Page As Control) As Boolean
Dim Retorno As Boolean = True
Dim msgErr As String = [Ô][Ô]
Try
For Each ctrl As Control In Page.Controls
If (Retorno = True) Then
If TypeOf ctrl Is TextBox Then
With CType(ctrl, TextBox)
If .Visible AndAlso .Text = String.Empty And .Tag = 1 Then
msgErr = String.Format(msg, .Name)
.Focus()
Retorno = False
End If
End With
ElseIf TypeOf ctrl Is ComboBox Then
With CType(ctrl, ComboBox)
If .Visible AndAlso .SelectedIndex < 0 And .Tag = 1 Then
msgErr = String.Format(msg, .Name)
.Focus()
Retorno = False
End If
End With
Else
If ctrl.Controls.Count > 0 Then
Validar(ctrl)
End If
End If
Next
Catch ex As Exception
Retorno = False
MessageBox.Show(ex.ToString)
End Try
If (msgErr.Trim.Lenght > 0) Then MessageBox.Show(msgErr, Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
Return Retorno
End Function

End Class


Com isso, pode melhorar a coisa.

Mas como sugestão mesmo, sem querer ser chato, eu faria uso de camadas e obviamente compondo classes de negócios, que podem agilizar em muito os processos de validação, conexão com a base de dados, processos, migrações, manutenção, atualizações de idéia etc. Resumindo, o menos ruim é sempre usar OOP, pois ainda que aparentemente [Ô]dê trabalho[Ô], é o mínimo necessário para uma programação aceitável.

Lembre que ao criar uma aplicação para um cliente qualquer, você assume um compromisso com a funcionalidade desse aplicativo, o que significa que daqui há dez anos ele pode aparecer na sua porta pedindo alterações, ou a devolução do dinheiro pago até aquela data. O que é pior, se o seu cliente for alguma entidade ligada á saúde, um mal funcionamento do seu aplicativo pode matar pessoas. Daqui há dez anos, com uma codificação orientada aos formulários, será muito provavelmente uma certeza de que você não lembrará de nada do seu código-fonte, tornando qualquer coisinha mínima em um transtorno.
ADHEL 12/08/2013 16:30:59
#427433
Obrigado pelas orientações Professor.
Trabalhar em camadas ainda é um horizonte distante, só agora que estou estudando OOP.
Pessoal, eu soneguei um informação importante, não era o meu intuito podem acreditar.
Os controles estão dentro de um GroupBox.
Aqui mesmo no VBMANIA eu li outro tópico a respeito e consegui resolver.
No botão ficou assim

    If _validar.Validar(Me.GroupBox1) = False Then
Exit Sub
Else
gravar()
End If

Peço desculpas aos colegas, por essa falha.
Vou pontuar o ASHKATCHUP porque foi o primeiro que respondeu.
Aos três, muito obrigado.
Página 2 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas