Inquiridor
Condição If

Pergunta
-
Tenho Duas combos: Uma que se refere (mes) e uma Que se refere (ano) gostaria que se o mes for outubro ou novembro ou dezembro ou janeiro e o ano for (2013) ou (2014) que uma outra textbox ou maskedbox se preenche como em dias ou em atrazo.
Eis o codigo que não esta dando certo:
Private Sub Combo1_Change()
If Combo1.Text = ("Outubro" Or "Novembro" Or "Dezembro" Or "Janeiro") And Combo2.Text = ("2013" Or "2014") Then
MaskEdBox6.Text = "Em dias"
Else
MaskEdBox6.Text = "Em atrazo"
End If
End Sub
Desde já agradeço a todos.
Todas as Respostas
-
-
-
Altair, sugiro você adicionar os meses e anos em um lista e verificar se existe na lista. A vantagem da lista é que você pode carregar de um banco ou adicionar dinamicamente de outro lugar.
Segue o exemplo:
'Adicionar o mês na lista Dim listaMeses As New List(Of String) listaMeses.Add("Outubro") listaMeses.Add("Novembro") 'Adiciona o ano na lista Dim listaAnos As New List(Of String) listaAnos.Add("2013") listaAnos.Add("2014") If listaMeses.Contains(Combo1.Text) AndAlso listaAnos.Contains(Combo2.Text) Then MessageBox.Show("Em dia.") Else MessageBox.Show("Em atraso.") End If
Bruno Ferreira de Souza
MVP - Microsoft Valuable Professional
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
www.maestrodotnet.com.br
@BrunoMaestro -
-
-
-
Esse código ficaria no lugar daquele que você postou, mas ai você adapta ele da forma que precisa. Para testar é só colocar o código no evento click e algum botão
Bruno Ferreira de Souza
MVP - Microsoft Valuable Professional
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
www.maestrodotnet.com.br
@BrunoMaestro -
-
Coloca o código dentro de algum método e chame ele de onde achar necessário.
Bruno Ferreira de Souza
MVP - Microsoft Valuable Professional
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
www.maestrodotnet.com.br
@BrunoMaestro -
-
Bruno descupe te incomodar, mas é muito urgente pra mim. Aqui estao as imagens do form e codigo:
Private Sub Form_Load()
Dim listaMeses As New List(Of String)
listaMeses.Add ("Outubro")
listaMeses.Add ("Novembro")
'Adiciona o ano na lista
Dim listaAnos As New List(Of String)
listaAnos.Add ("2013")
listaAnos.Add ("2014")
If listaMeses.Contains(Combo1.Text) AndAlso listaAnos.Contains(Combo2.Text) Then
MessageBox.Show ("Em dia.")
Else
MessageBox.Show ("Em atraso.")
End If
End Sub
tentei envia a imagem do form mas nao teve jeito
-
Se não está reconhecendo, faz import do namespace
System.Collections.Generic
Bruno Ferreira de Souza
MVP - Microsoft Valuable Professional
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
www.maestrodotnet.com.br
@BrunoMaestro -
-
Esse exemplo que passei é em .net, no vb 6 não irá funcionar.
Bruno Ferreira de Souza
MVP - Microsoft Valuable Professional
MCTS .NET Framework - Windows Applications
MCPD .NET Framework - Windows Applications
www.maestrodotnet.com.br
@BrunoMaestro -
-
Este codigo aqui deus certo:
Private Sub Form_Load()
If Combo1.Text = "Novembro" Or Combo1.Text = "Dezembro" Or Combo1.Text = "Janeiro" And Combo2.Text = "2013" Or Combo2.Text = "2014" Then
MsgBox "Socio Em dia."
Text1.Text = "Em dia"
Else
MsgBox "Socio Em atraso."
Text1.Text = "Em atraso"
End If
end sub
mas só funciona no primeiro registro, por favor gente estou perto de resolver o problema desde ja agradeçoa todos que ja colaboraram !Wennder e Bruno
-
Olá Altair,
tente fazer a comparação separada. Ex:
If Combo1.Text = "Outubro" Or _ Combo1.Text ="Novembro" Or _ Combo1.Text ="Dezembro" Or _ Combo1.Text ="Janeiro" And Combo2.Text = "2013" Or _ Combo2.Text = "2014" Then
Wennder
Altair, o Wennder deu a sugestão que deverá funcionar corretamente, mas faltou uma coisa: os Parênteses.
Veja, se o IF for construído diretamente (mesmo que você use o underline para quebrar as linhas - para fins de organização) o "AND" ocorre entre "Combo1.Text = "Janeiro"" e "Combo2.Text = "2013"".
Teria que ser:
If (Combo1.Text = "Outubro" Or _ Combo1.Text = "Novembro" Or _ Combo1.Text = "Dezembro" Or _ Combo1.Text = "Janeiro") And _ (Combo2.Text = "2013" Or _ Combo2.Text = "2014") Then MaskEdBox6.Text = "Em dias" Else MaskEdBox6.Text = "Em atrazo" End If
Agora eu só vou dar uma melhorada neste código (e eu assumo que você está no VB.net (2005-2013) onde pode-se usar "OrElse" ao invés de "Or" apenas e "AndAlso" ao invés de apenas "And". Nesse caso é melhor na performance porque se o "OrElse" ou "AndAlso" encontrar o valor falso ele não perde tempo testando os outros condicionais.
Ainda, você pode usar o select. Esse vai ficar ainda melhor:
Select Case Combo1.Text.ToLower() Case "outubro", "novembro", "dezembro", "janeiro" If combo2.Text = "2013" OrElse combo2.Text = "2014" Then MaskEdBox6.Text = "Em Dias" Else MaskEdBox6.Text = "Em Atrazo" End If Case Else MaskEdBox6.Text = "Em Atrazo" End Select
Vê, assim o Select resolve o teste dos meses (e a função "ToLower()" coloca o texto em minúsculo assim se a combo tiver com liberação para digitação, mesmo que seja digitado com diferente do padrão pelo usuário você terá sempre uma comparação positiva.
Outra forma de você testar é não olhar o texto, mas a propriedade "SelectedIndex" da combo box, e usar o mesmo raciocínio do Select Case, comparando com o índice da opção desejada na lista (assim fica ainda melhor porque se você alterar este texto - disponibilizando o programa em vários idiomas, por exemplo - você sempre vai ter uma mesma propriedade a comparar.
Ficaria assim (supondo que na combo tenha de "Janeiro" a "Dezembro" em ordem):
Select Case Combo1.SelectedIndex Case 9, 10, 11, 0 'Porque o índice começa em 0 para Janeiro If combo2.Text = "2013" OrElse combo2.Text = "2014" Then MaskEdBox6.Text = "Em Dias" Else MaskEdBox6.Text = "Em Atrazo" End If Case Else MaskEdBox6.Text = "Em Atrazo" End Select
Espero ter ajudado.
- Editado SammuelMiranda terça-feira, 21 de janeiro de 2014 12:35 Estilo dos códigos
- Sugerido como Resposta SammuelMiranda terça-feira, 21 de janeiro de 2014 13:04
-
-