Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Manhunt

[Resolvido] Problema com contador!

Recommended Posts

Boas galera!

 

É assim, eu estou com um problema e necessitava de o resolver, mas não consigo...

Estou aprendendo a programar nessa linguagem.

 

Eu estou a criar uma aplicação em que tenho 3 textboxes e em cada uma delas irei escrever um número.

No fim, eu queria que ao clicar num botão, este me desse uma messagebox a indicar quem fqual é a textbox com o valor mais elevado e mostrava o respectivo conteúdo do objecto , só que eu não estou consiguindo fazer isso.

 

Já tentei de imensas maneiras mas não consigo sair dessa...

Deixo aqui o código em que estou trabalhando,

 

 

Private Sub Btfinal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btfinal.Click

 

Dim a, b, c As String

Dim vencedor As Integer

 

a = Val(Tba.Text) > (Tbb.Text) > (Tbc.Text) > (Tbd.Text)

b = Val(Tbb.Text) > (Tba.Text) > (Tbc.Text) > (Tbd.Text)

c = Val(Tbc.Text) > (Tba.Text) > (Tbb.Text) > (Tbd.Text)

 

Select vencedor

 

Case a = True And b = False And c = False And d = False

MessageBox.Show("Ganhou o 1º grupo " & Val(Tba.Text))

Case b = True And a = False And c = False and d = False

MessageBox.Show("Ganhou o 2º grupo " & Val(Tbb.Text))

Case c = True And a = False And b = False and d = False

MessageBox.Show("Ganhou o 3º grupo " & Val(Tbc.Text))

 

End Select

 

End Sub

 

 

 

Por favor galera me ajuda.

 

Grato pela vossa atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos esclarecer algumas coisas:

Esse "Tbd" seria uma quarta TextBox?

Caso sim, ele não é necessário para verificar somente 3 números.

 

Para fazer o que você pretende, eu mudaria toda a lógica pra isso:

If CSng(Tba.Text) > CSng(Tbb.Text) And CSng(Tba.Text) > CSng(Tbc.Text) Then
               MessageBox.Show("Ganhou o 1º grupo com o valor " & Tba.Text)
ElseIf CSng(Tbb.Text) > CSng(Tba.Text) And CSng(Tbb.Text) > CSng(Tbc.Text)
               MessageBox.Show("Ganhou o 2º grupo com o valor " & Tbb.Text)
Else
               MessageBox.Show("Ganhou o 3º grupo com o valor " & Tbc.Text)

 

 

Perceba que é verificado se o valor desejado é maior que os dois outros valores existentes, evitando maiores "problemas".

Creio que isso solucione a sua situação-problema, mas teste aí e veja se está ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos esclarecer algumas coisas:

Esse "Tbd" seria uma quarta TextBox?

Caso sim, ele não é necessário para verificar somente 3 números.

 

Para fazer o que você pretende, eu mudaria toda a lógica pra isso:

If CSng(Tba.Text) > CSng(Tbb.Text) And CSng(Tba.Text) > CSng(Tbc.Text) Then
               MessageBox.Show("Ganhou o 1º grupo com o valor " & Tba.Text)
ElseIf CSng(Tbb.Text) > CSng(Tba.Text) And CSng(Tbb.Text) > CSng(Tbc.Text)
               MessageBox.Show("Ganhou o 2º grupo com o valor " & Tbb.Text)
Else
               MessageBox.Show("Ganhou o 3º grupo com o valor " & Tbc.Text)

 

 

Perceba que é verificado se o valor desejado é maior que os dois outros valores existentes, evitando maiores "problemas".

Creio que isso solucione a sua situação-problema, mas teste aí e veja se está ok.

 

Desde já obrigado pela sua resposta.

Mas necessito de fazer algumas questões...

 

1º Se eu digitasse uma 4ª TextBox como ficaria o código?

 

2º Quando eu arranco o formulário, se eu tiver tudo em 0, ele dá-me a MessageBox que o 3º grupo ganhou, mas isso não é possivel, pois se eu não escrevi nada... Depois se der pontos é que o código funciona bem.

 

Será que você me poderia responder a essas duvidas?

 

E porque usa o CSng?

Só para eu eu perceber a lógica coisas.

 

Uma coisa eu te garanto, apesar dessas falhas, o seu código já trabalha melhor que o meu :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você adicionasse mais uma textbox o que você ia precisar fazer era só adicionar mais um Else If pra testar o ultimo resultado, no primeiro você testa se o primeiro for maior que todos, no segundo se o segundo for maior que todos, e o else no final é porque não há mais nenhuma outra possibilidade alem dessas tres, se você adicionasse outra, você precisaria fazer maiis um if para testar se a terceira era maior que as demais e se fosse o ultimo else seria o óbvio, que a ultima txtbox seria maior que as demais.

 

O CSng você poderia substituir por Val(Tba.text) ou então Convert.ToInt32(Tba.text) é apenas por intuito de conversão mesmo, CSng converte a expressão para o tipo de dados Single.

 

Para resolver o problema das textboxes vazias, você pode criar um if que engloba todo o código de verificação: exemplo:

 

if Not String.isnullorempty(tba.text) and String.isnullorempty(tbb.text) andalso String.isnullorempty(tbc.text Then

Todo o código de verificação aqui
Else
Msgbox("Você tem uma textbox vazia")

End if

 

Você pode substituir o "And" por "Or" assim se qualquer uma estiver vazia você não vai poder digitar nada

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara obrigado pela explicação, sempre dá para aprender novos conceitos de programação que nesse caso não conhecia, no entanto, infelizmente o código escrito dessa forma não funciona não...

 

Ele não dá erro, mas o que acontece é que dessa forma ele só faz a comparação entre as duas primeiras textboxes, as outras duas podem ter mais pontos, só que ele não mostra a respectiva MessageBox.

 

Ex:

 

tba.text = 1

tbb.text = 5

tbc.text = 8

tbd.text = 9

 

Ele diz que o vencedor é 2º grupo, porque tem 5 pontos, mas se meter 6 pontos no na tba, ele diz que o vencedor é o 1º grupo...

 

O que estou fazendo mal?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o seu código atual aqui dentro das tags code para que possamos dar uma olhada e tentar descobrir o erro.

 

Abraços ;)

 

Bem então aqui vai:

 

Private Sub Frvotos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Tba.Text = 0
Tbb.Text = 0
Tbc.Text = 0
Tbd.Text = 0
Tbmedia.Text = 0
Tbmediab.Text = 0
Tbmediac.Text = 0
Tbmediad.Text = 0
End Sub


Private Sub Btpontos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btpontos.Click

If CSng(Tba.Text) > CSng(Tbb.Text) And CSng(Tbc.Text) And CSng(Tbd.Text) Then
MessageBox.Show("Ganhou o 1º grupo com o valor " & Tba.Text)

ElseIf CSng(Tbb.Text) > CSng(Tba.Text) And CSng(Tbc.Text) And CSng(Tbd.Text)
MessageBox.Show("Ganhou o 2º grupo com o valor " & Tbb.Text)

ElseIf CSng(Tbbc.Text) > CSng(Tba.Text) And CSng(Tbb.Text) And CSng(Tbd.Text)
MessageBox.Show("Ganhou o 3º grupo com o valor " & Tbc.Text)

ElseIf CSng(Tbd.Text) > CSng(Tba.Text) And CSng(Tbb.Text) And CSng(Tbc.Text)
MessageBox.Show("Ganhou o 4º grupo com o valor " & Tbd.Text)

if Not String.isnullorempty(tba.text) and String.isnullorempty(tbb.text) and String.isnullorempty(tbc.text)andalso String.isnullorempty(tbd.text Then
Msgbox("Você tem uma textbox vazia")

End if

End If

End Sub

 

Agora eu tenho o código assim, mas já mudei montes de vezes...

Por isso é provavel que as coisas já não estejam bem organizadas.

 

Obrrigado pela vossa ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funciona porque o código que eu passei pra você lá encima esta por último, ele tem que ficar no topo dos ifs e todos osnifs tem que ficar dentro dele

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se calhar estou fazendo uma coisa mal...

 

Vou então tentar com esse código e tentar perceber o que estou fazendo mal.

 

Se por acaso eu não estiver acertando, posso vir aqui novamente? :P

De qualquer forma se eu conseguir arranjar solução, virei aqui postar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desta maneira:

 

 

Private Sub Frvotos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Tba.Text = 0
Tbb.Text = 0
Tbc.Text = 0
Tbd.Text = 0
Tbmedia.Text = 0
Tbmediab.Text = 0
Tbmediac.Text = 0
Tbmediad.Text = 0
End Sub


Private Sub Btpontos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btpontos.Click



if Not String.isnullorempty(tba.text) and String.isnullorempty(tbb.text) and String.isnullorempty(tbc.text) andalso String.isnullorempty(tbd.text) Then





If CSng(Tba.Text) > CSng(Tbb.Text) And CSng(Tbc.Text) And CSng(Tbd.Text) Then
MessageBox.Show("Ganhou o 1º grupo com o valor " & Tba.Text)

ElseIf CSng(Tbb.Text) > CSng(Tba.Text) And CSng(Tbc.Text) And CSng(Tbd.Text)
MessageBox.Show("Ganhou o 2º grupo com o valor " & Tbb.Text)

ElseIf CSng(Tbbc.Text) > CSng(Tba.Text) And CSng(Tbb.Text) And CSng(Tbd.Text)
MessageBox.Show("Ganhou o 3º grupo com o valor " & Tbc.Text)

ElseIf CSng(Tbd.Text) > CSng(Tba.Text) And CSng(Tbb.Text) And CSng(Tbc.Text)
MessageBox.Show("Ganhou o 4º grupo com o valor " & Tbd.Text)

End if



Else
Msgbox("Você tem uma textbox vazia")


End If


End Sub

 

 

Eu separei os blocos de if's para você ver a diferença entre os dois, pegou a lógica?

 

Outro erro seu é este aqui:

 

ElseIf CSng(Tbd.Text) > CSng(Tba.Text) And CSng(Tbb.Text) And CSng(Tbc.Text)

 

O computador não reconhece se você coloca apenas: se txtA >b e c quando você usa a sintaxe:

 

if Csng(txtA.text) Then...

 

ele vai entender que TxtA.text é uma variável do tipo boolean, e vai dar erro. Para funcionar você precisa por os tres parametros:

 

Se txtA > txtB e TxtA > txtC e txtA > txtD

 

e assim por diante deste modo em todos os ifs e elseifs:

 

ElseIf CSng(Tbd.Text) > CSng(Tba.Text) And CSng(Tbd.Text) > CSng(Tbb.Text) And CSng(Tbd.Text) > CSng(Tbc.Text)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo...

 

Andei durante algum tempo a estudar algumas coisas, mas não estava conseguindo resolver o problema.

Deixei para trás e fui fazendo outras coisas para melhorar a minha pratica, só que ontem vim aqui novamente e reparei que tinha editado o seu post.

 

Depois de fazer alguns teste, tenho a dizer que ele funciona bem, mas eu não tinha então entendido essa parte do código.

 

Muito obrigado, você foi 5 estrelas!

Puxa, muito obrigado pela sua ajuda e sobretudo pela sua explicação, pois dessa forma evoluir.

Obrigado!

 

Um Abraço pra voce!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há de que Manhunt :)

 

É muito bom saber que estou sendo útil e ajudando outros programadores a crescer e a se desenvolver nesse mundo de códigos ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.