IF THEN ELSE COM MAIS DE UM ARGUMENTO.

XYKOVIEIRA 16/05/2012 16:29:53
#402097
[ô]Tenho no VB6 um project que, entre outras coisas, permite a entrada de novos itens, consultas, exclusão e alteração.[ô]
[ô]Quando clico no menu <Novo>, um form de entrada de dados é exibido, tendo ao lado um botão <New> visível, mas não disponível (enabled=False).
[ô]Ao clicar no menu <Editar>, após o processo de procura pelo registro, o form é exibido, com todos os campos preenchidos, para edição, tendo um
[ô]botão <Old> visível e com a propriedade Enabled=False.
[ô]A idéia é interceptar a gravação (seja um novo registro, ou uma edição) antes da gravação, com uma msgbox pedindo confirmação
[ô]para a gravação. O procedimento abaixo, é disparado no evento <LostFocus> da txtResumo:

Private Sub txtResumo_LostFocus()
If cmdOld.Visible = True Then [ô]cmdOld >>> Edição de registro.
Tabela.Edit
AtualizaCampos
Tabela.Update
cmdLimpa.Visible = False
cmdCancela.Visible = False
mnuAcessar.Enabled = True
mnuUtilitarios.Enabled = True
mnuDica.Enabled = True
cmdOld.Visible = False
LimpaTudo
Invisible
If lstMat.Visible = True Then lstMat.Visible = False
TabelaAlterada = True [ô]Ajusta o sistema para o backup no evento <Unload>...
MsgBox [Ô]Eventuais alterações[Ô] & vbNewLine & _
[Ô]processadas com êxito...[Ô], vbInformation, [Ô]Artigo editado: <[Ô] & Tabela!NomeArt & [Ô]>[Ô]
Exit Sub
Else
If cmdNew.Visible = True Then [ô]cmdNew >>> Novo registro....
Tabela.AddNew
If txtResumo = vbNullString Then txtResumo = [Ô]Sem informações...[Ô]
AtualizaCampos
Tabela.Update
Tabela.MoveLast
cmdLimpa.Visible = False
cmdCancela.Visible = False
mnuAcessar.Enabled = True
mnuUtilitarios.Enabled = True
mnuDica.Enabled = True
cmdNew.Visible = False
LimpaTudo
Invisible
If lstMat.Visible = True Then lstMat.Visible = False
TabelaAlterada = True [ô]Ajusta o sistema para o backup no evento <Unload>...
MsgBox [Ô]Registro de novo título[Ô] & vbNewLine & _
[Ô]processado com êxito...[Ô], vbInformation, [Ô]Novo Filme: <[Ô] & Tabela!NomeArt & [Ô]>[Ô]
Exit Sub
End If
End If
End Sub

[ô]Alguém de vocês teria um exemplo de como inserir, no código acima, a msgbox que daria a opção de confirmar a gravação
[ô]ou de cancelar, se for o caso, associada à rotina do evento <LostFocus> da textbox? Tks a lot...
ROBIU 16/05/2012 16:53:04
#402098
Resposta escolhida
Para só executar se confirmar, coloque isso no inicio do código:
If MsgBox([Ô]Deseja salvar ?[Ô], vbYesNo, [Ô]Confirme[Ô]) = vbNo Then Exit Sub


Se desejar que algo seja executado caso a resposta seja não, colaca assim:

If MsgBox([Ô]Deseja salvar ?[Ô], vbYesNo, [Ô]Confirme[Ô]) = vbYes Then
[ô]Se confirmar executa o que você colocar aqui, no seu caso a rotina acima.
Else
[ô]Se não confirmar executa o que você definir aqui

End If
XYKOVIEIRA 16/05/2012 19:19:17
#402114
Obrigado Robiu.
Na realidade, eu estava pensando numa forma de aninhar dois parâmetros nos comandos IF, nas duas situações
possíveis: novo registro ou edição de registro existente.
Tipo:
If cmdOld.Visible = True And MsgBox ([Ô]Confirma salvar as alterações?[Ô],vbQuestion + vbYesNo) = vbYes then
(comandos para gravar as alterações)...
Exit Sub
Else
(comandos para sair sem gravar as alterações)
Exit Sub
Else
(Aqui, deveria entrar a rotina abaixo, se cmdOld.Visible = False e cmdNew.Visible = True). Mas, na prática, ainda não consegui...
If cmdNew.Visible = True And MsgBox ([Ô]Confirma salvar novo registro?[Ô], vbQuestion + vbYesNo) = vbYes then
(comandos para gravar o novo registro)...
Else
(comandos para sair sem gravar o novo registro)



MARCELO.TREZE 16/05/2012 19:39:26
#402116
use o elseif é assim memso tudo junto.

exemplo

If x = 1 then
[ô] x=1
ElseIf x = 2 then
[ô] x = 2
ElseIf x = 3 Then
[ô][ô] x = 3
End if


ou então trocar o If pelo Select Case

Select Case X
Case 1
x=1
Case 2
x=2
Case 3
X=3
End Select


ROBIU 16/05/2012 19:47:51
#402117
Então tenta assim:
Dim Resposta As VbMsgBoxResult
Resposta = MsgBox([Ô]Confirma salvar as alterações?[Ô], vbQuestion + vbYesNo)

If CmdOld.Visible = True And Resposta = vbYes Then
[ô](comandos para gravar as alterações)...
ElseIf CmdNew.Visible = True And Resposta = vbYes Then
[ô](comandos para gravar o novo registro)...
Else
[ô](comandos para sair sem gravar Inclusões ou alterações)
MsgBox [Ô]Teste[Ô]
End If
LUCASVAZ 17/05/2012 09:10:30
#402121
Você pode dar uma estudada em Ternarios tambem acho que te ajudaria:

http://muitomaisque.net/muitomaisque/post/2011/05/03/Operador-ternario-em-VBNET.aspx
XYKOVIEIRA 17/05/2012 11:30:48
#402134
Obrigado a todos.
Adaptei a rotina descrita pelo Robiu e o project rodou cfe. eu pretendia.
Abraços aos amigos.
Chico
Tópico encerrado , respostas não são mais permitidas