none
Ajuda em randomizar númeroe de picturebox RRS feed

  • Pergunta

  • E ai galera, tudo bom?

    Bom... eu queria pedir ajuda para vocês para ver se tem como fazer isso:

    Estou criando um jogo em que eu uso uma sub rotina que eu vou colocar duas variáveis nessa sub rotina(não sei como se chama isso :s)

    enfim.. só que as variáveis são para informar qual picturebox vou usar, as variáveis vou jogar na hora da sub rotina

    olhem a sub rotina:

    Private Sub PBa(ByRef i As Integer, ByRef f As Integer)
            If PB = [i] Then
                PR.Image = PB[f].Image
                PB[f].Image = PB + pb[i].Image
                PB[i].Image = PR.Image
                PB[i].BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
        End Sub

    OBS: PB = picturebox; I = variavel(inicial); F = variavel(final)

    Lembrando que eu quero usar essas variáveis para informar o número da picturebox ex: pb1, pb2.

    Porém da o erro:" 'Image' is not a member of 'Integer' "

    Sou novo em programação, não sei se tem como fazer isso, mas se tiver, por favor me ajudem?

    Vlw por enquanto ;D

    quinta-feira, 24 de outubro de 2013 23:02

Respostas

  • Não juntar o nome de objeto não dá, porque é um valor do tipo String e o Picture é Objeto! Tipos diferentes!

    Agora deve ter um opção melhor para que você faça isso mas, eu não sei o que você quer fazer com isso!!!

    é melhor você relata o que deseja!

    Tipo quero que o picture2 e picture5 fique azul royal com bolinha verde!

    é mais fácil achar a solução do seu problema!

    Qual o problema ???


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 20:41

Todas as Respostas

  • O erro ta no if  If PB = [i] Then se ta comprando PB com cochete de i ta errado, ai não sei qual sua itenção ali!

    Se pode fazer com a classe Random a randonização de um numero e ai atribuir a qual imagem pertence aquele número!


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 03:10
  • Acho que não expliquei direito o que eu queria fazer. :)

    essa variável está entre colchetes pois vi em outro site uma variável assim, ai coloquei para ver se funcionava, mas não deu certo... Mas o que eu realmente quero, é que:

    Essa parte: "PR.Image = PB[f].Image". O "f(variável)" vai conter um número que vai identificar qual picturebox é, ex: se o f = 8 então,"PB[f].image" logo.. "PB8.image" ou seja, o 8 será o f, porém n sei como fazer isso. Ele dá erro nessa parte..

    Mas valeu! =D


    • Editado GPrimO sexta-feira, 25 de outubro de 2013 17:08
    sexta-feira, 25 de outubro de 2013 17:04
  • Acho que não expliquei direito o que eu queria fazer. :)

    essa variável está entre colchetes pois vi em outro site uma variável assim, ai coloquei para ver se funcionava, mas não deu certo... Mas o que eu realmente quero, é que:

    Essa parte: "PR.Image = PB[f].Image". O "f(variável)" vai conter um número que vai identificar qual picturebox é, ex: se o f = 8 então,"PB[f].image" logo.. "PB8.image" ou seja, o 8 será o f, porém n sei como fazer isso. Ele dá erro nessa parte..

    Mas valeu! =D


    Coloque imagens e simbolize o que vc quer! eu queria entender mais!

    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 17:10
  • Então... Essa é a sub rotina em que estou tendo problema para identificar qual é a picturebox com variável:

        Private Sub PBa(ByRef i As Integer, ByRef f As Integer)
            If PB = [i] Then
                PR.Image = PB[f].Image
                PB[f].Image = PB[i].Image)
                PB([i].Image = PR.Image)
                PB([i].BorderStyle = BorderStyle.None)
                PB = 0
                mov = mov + 1
            End If
        End Sub

    E aqui é onde eu colocaria essa sub rotina:

            If PB = 1 Then
                PR.Image = PB2.Image
                PB2.Image = PB1.Image
                PB1.Image = PR.Image
                PB1.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If

    Neste local onde vou aplicar a sub rotina existem muito desses comandos dentro de IF's, por isso vou usar uma sub rotina, para ficar mais rápido de fazer o programa, e também para facilitar.

    Veja agora como eu iria aplicar a sub rotina

            If PB = 1 Then
                PBa(1, 2)
            End If

    É isso, espero que tenha entendido =D

    OBS: O site não deixou eu colocar imagens e nem links no post.. :s



    • Editado GPrimO sexta-feira, 25 de outubro de 2013 17:56
    sexta-feira, 25 de outubro de 2013 17:54
  • Eu já tinha entendido!

    Você não pode simplesmente colocar coxete e indentificar o número dessa forma!

    porque ele pega Objeto e não texto simplesmente!

    Na Pba se coloca todos os ifs que estão no código e pronto!

    Faça comparação simples igual no exemplo que você me passou dentro da Pba

    If PB = 1 Then
       PR.Image = PB2.Image
       PB2.Image = PB1.Image
       PB1.Image = PR.Image
       PB1.BorderStyle = BorderStyle.None
       PB = 0
       mov = mov + 1
    Else 
          If PB = 2 Then
             PR.Image = PB2.Image
             PB2.Image = PB1.Image
             PB1.Image = PR.Image
             PB1.BorderStyle = BorderStyle.None
             PB = 0
             mov = mov + 1
          endif
    End If

    e faça assim por diante!

    Até tem uma forma de eu identificar os controls de um formulario mas, você ta aprendendo é melhor fazer o mais simples possivel!


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 19:19
  • Então... Essa é a sub rotina em que estou tendo problema para identificar qual é a picturebox com variável:

        Private Sub PBa(ByRef i As Integer, ByRef f As Integer)
            If PB = [i] Then
                PR.Image = PB[f].Image
                PB[f].Image = PB[i].Image)
                PB([i].Image = PR.Image)
                PB([i].BorderStyle = BorderStyle.None)
                PB = 0
                mov = mov + 1
            End If
        End Sub

    E aqui é onde eu colocaria essa sub rotina:

            If PB = 1 Then
                PR.Image = PB2.Image
                PB2.Image = PB1.Image
                PB1.Image = PR.Image
                PB1.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If

    Neste local onde vou aplicar a sub rotina existem muito desses comandos dentro de IF's, por isso vou usar uma sub rotina, para ficar mais rápido de fazer o programa, e também para facilitar.

    Veja agora como eu iria aplicar a sub rotina

            If PB = 1 Then
                PBa(1, 2)
            End If

    É isso, espero que tenha entendido =D

    OBS: O site não deixou eu colocar imagens e nem links no post.. :s



    Só uma observação: tem sim uma forma de você colocar imagens que são duas por post!

    Se quiser pega seu projeto, compacte e coloque a disposição em alguma repositório de arquivos que ai a gente vê e te fala como corrigir!


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 19:21
  • Então, eu poderia fazer assim, mas eu queria fazer uma rotina pois, cada IF tem um picturebox diferente!

    Olha o bloco de comandos do evento click de uma picturebox:

        Private Sub PB9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PB9.Click
            If PB = 0 Then
                PB9.BorderStyle = BorderStyle.FixedSingle
                PB = 9
            End If
            If PB = 3 Then
                PR.Image = PB9.Image
                PB9.Image = PB3.Image
                PB3.Image = PR.Image
                PB3.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
            If PB = 8 Then
                PR.Image = PB9.Image
                PB9.Image = PB8.Image
                PB8.Image = PR.Image
                PB8.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
            If PB = 10 Then
                PR.Image = PB9.Image
                PB9.Image = PB10.Image
                PB10.Image = PR.Image
                PB10.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
            If PB = 15 Then
                PR.Image = PB9.Image
                PB9.Image = PB15.Image
                PB15.Image = PR.Image
                PB15.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
        End Sub

    E ainda tem mais 36 picturebox's pra fazer isso, por isso quis utilizar uma sub rotina, pois só jogaria nela o número correspondente de uma picturebox!

    Ai eu tenho uma dúvida: Não tem como eu usar uma variável no lugar do número de uma picturebox, exemplo: em vez de "picturebox1.image" colocar no lugar "picturebox f .image" f = 1

    Pois eu utilizava o pascal antes, e se eu não me engano, tinha como fazer isso, mas não consigui no vb!

    Mas Muito Obrigado por enquanto! =D

    sexta-feira, 25 de outubro de 2013 19:36
  • Sim, eu vi, porém parece que esta bloqueado na minha conta... :/
    sexta-feira, 25 de outubro de 2013 19:36
  • Então, eu poderia fazer assim, mas eu queria fazer uma rotina pois, cada IF tem um picturebox diferente!

    Olha o bloco de comandos do evento click de uma picturebox:

        Private Sub PB9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PB9.Click
            If PB = 0 Then
                PB9.BorderStyle = BorderStyle.FixedSingle
                PB = 9
            End If
            If PB = 3 Then
                PR.Image = PB9.Image
                PB9.Image = PB3.Image
                PB3.Image = PR.Image
                PB3.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
            If PB = 8 Then
                PR.Image = PB9.Image
                PB9.Image = PB8.Image
                PB8.Image = PR.Image
                PB8.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
            If PB = 10 Then
                PR.Image = PB9.Image
                PB9.Image = PB10.Image
                PB10.Image = PR.Image
                PB10.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
            If PB = 15 Then
                PR.Image = PB9.Image
                PB9.Image = PB15.Image
                PB15.Image = PR.Image
                PB15.BorderStyle = BorderStyle.None
                PB = 0
                mov = mov + 1
            End If
        End Sub

    E ainda tem mais 36 picturebox's pra fazer isso, por isso quis utilizar uma sub rotina, pois só jogaria nela o número correspondente de uma picturebox!

    Ai eu tenho uma dúvida: Não tem como eu usar uma variável no lugar do número de uma picturebox, exemplo: em vez de "picturebox1.image" colocar no lugar "picturebox f .image" f = 1

    Pois eu utilizava o pascal antes, e se eu não me engano, tinha como fazer isso, mas não consigui no vb!

    Mas Muito Obrigado por enquanto! =D

    Existe uma forma mas, não como você ta fazendo!

    Eu consigo por nome de objeto setar o mesmo objeto e configurar ele automaticamente!

    Faz o seguinte!

    você poderia detalhar um exemplo simples com tipo PVB = 2 exemplificar e mandar a imagem

    eu não estou entendendo o que você ta querendo fazer! se entende-se mandaria um exemplo!


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 19:39
  • Bom.. vou tentar explicar direito agora =D

    Quando você vai pegando a picturebox(ou qualquer objeto) da caixa de ferramentas do VB.net ele fica com o nome: "picturebox1" e assim por diante.. "picturebox2" .. "picturebox3"

    Esse é o nome da ferramenta picturebox, e ali no meu projeto eu quero juntar o nome "PB" mais o número da váriavel para formar o nome da picturebox ou seja:

    PB + VARIAVEL = nome da picturebox

    Entendeu?

    pois quando eu for usar a sub rotina eu vou escolher em qual picturebox eu quero mudar a imagem!

    Se não entender, pf avisa! Pois vou tentar explicar melhor... pois se eu resolver isso ficará muito mais fácil finalizar meu projeto!

    sexta-feira, 25 de outubro de 2013 19:52
  • Mas essa de juntar o nome não funciona!!!

    Na hora da programação você tem que falar o nome do Objeto!

    Isso ai não é texto! é uma programação de Componentes que são Orientados a Objeto!

    Você tem que falar para mim o que quer fazer!

    Quais ações você quer que acontece em um cenário real!


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 20:19
  • Mas era isso que eu queria fazer.. juntar o nome.. ja tentei criar uma variável X onde o valor dela fosse o nome junto ex: "x = Picturebox + 1"

    depois: x.image = my.resources...

    mas ele deu erro... 'Image is not a member of 'Integer'

    Então não tem realmente como juntar?

    sexta-feira, 25 de outubro de 2013 20:32
  • Não juntar o nome de objeto não dá, porque é um valor do tipo String e o Picture é Objeto! Tipos diferentes!

    Agora deve ter um opção melhor para que você faça isso mas, eu não sei o que você quer fazer com isso!!!

    é melhor você relata o que deseja!

    Tipo quero que o picture2 e picture5 fique azul royal com bolinha verde!

    é mais fácil achar a solução do seu problema!

    Qual o problema ???


    Fúlvio Cezar Canducci Dias

    sexta-feira, 25 de outubro de 2013 20:41
  • É que tipo, existem várias possibilidades.. depende de qual picturebox estou clicando, e quais picturebox estão em sua volta..

    Pois esse projeto é de um puzzle que eu criei para um trabalho..

    Vou explicar pra que funciona cada coisa!

    O esquema é:

    Eu tenho uma picturebox escondida chamada PR

    e varias picturebox's, diminui o nome para PB1,PB2...PB36

    ai por exemplo:

    Eu click na PB1

    Ai no comando ficara assim:

    If PB = 0 Then
         PB9.BorderStyle = BorderStyle.FixedSingle
         PB = 1
    End If
    

    Primeira linha é um IF onde tem uma variável PB que indica se esse picturebox foi o primeiro a ser clickado, se eu clickei em outro picturebox de PB será correspondente à PB que eu clickei antes.

    Segunda linha é mais para aparência, para sinalizar de que aquela picturebox foi selecionada.

    Terceira linha eu estou mudando o valor da PB para a próxima picturebox a ser clickada.

    Que no exemplo será a PB2, veja o comando:

    If PB = 1 Then
          PR.Image = PB2.Image
          PB2.Image = PB1.Image
          PB1.Image = PR.Image
          PB1.BorderStyle = BorderStyle.None
          PB = 0
          mov = mov + 1
    End If

    Primeira linha: Indica que se eu clickei primeiro na PB1.

    Segunda linha, eu passo a imagem da PB2 para a Picturebox escondida que é a PR.

    Terceira linha eu passo a imagem da PB1 para a PB2.

    Quarta linha eu passo a imagem da PR para a PB1

    Quinta linha eu faço a bordar da PB1 voltar ao normal(pois eu mudei no evento click da PB1).

    Na Sexta eu coloco o valor da PB = 0 para indicar q nenhuma PB foi clickada.

    Na Sétima eu acrescento mais um, em uma variável que conta os movimentos que a pessoa fez.

    E Você só pode mover a imagem para picturebox que estão do seu lado ou em cima ou em baixo, não pode em diagonais e nem picturebox longes..!

    Obrigado por enquanto!

    sexta-feira, 25 de outubro de 2013 20:58