Manhunt 0 Denunciar post Postado Setembro 6, 2012 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
Kairion 0 Denunciar post Postado Setembro 6, 2012 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
Manhunt 0 Denunciar post Postado Setembro 6, 2012 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
KhaosDoctor 242 Denunciar post Postado Setembro 7, 2012 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
Manhunt 0 Denunciar post Postado Setembro 7, 2012 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
Kairion 0 Denunciar post Postado Setembro 7, 2012 Poste o seu código atual aqui dentro das tags code para que possamos dar uma olhada e tentar descobrir o erro. Abraços ;) Compartilhar este post Link para o post Compartilhar em outros sites
Manhunt 0 Denunciar post Postado Setembro 7, 2012 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
KhaosDoctor 242 Denunciar post Postado Setembro 8, 2012 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
Manhunt 0 Denunciar post Postado Setembro 9, 2012 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
KhaosDoctor 242 Denunciar post Postado Setembro 10, 2012 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
Manhunt 0 Denunciar post Postado Setembro 16, 2012 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
KhaosDoctor 242 Denunciar post Postado Setembro 17, 2012 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