GRAVAR DEPOIS DE VALIDAR [Ô]NOVAMENTE[Ô]
Hum...
Olhei novamente, parece estar certo
Se quiser postar o codigo agente da uma olhada.
Olhei novamente, parece estar certo
Se quiser postar o codigo agente da uma olhada.
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:
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.
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.
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
Peço desculpas aos colegas, por essa falha.
Vou pontuar o ASHKATCHUP porque foi o primeiro que respondeu.
Aos três, muito obrigado.
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.
Tópico encerrado , respostas não são mais permitidas