Como executar um comando que está dentro de uma String? VB.NET

19/02/2015

0

Olá a todos!

Preciso de uma forma de converter uma string e um comando vb.net

Exemplo:
Dim comando as String
comando = "pctMq11.Image = My.Resources.Computer_On"


Preciso executar o conteúdo que está dentro dessa string COMANDO para alterar a imagem de uma PictureBox.


Procurei bastante na internet e achei pouquíssimo conteúdo sobre como converter string em comando, e o pouco que eu achei eu não consegui aplicar no meu formulário.
Quem puder ajudar eu agradeço muito.
Robson Souza

Robson Souza

Responder

Post mais votado

20/02/2015

Cara, você está querendo criar um compilador. Qual é sua real necessidade, de repente conseguimos achar uma solução mais simples.

Joel Rodrigues

Joel Rodrigues
Responder

Mais Posts

20/02/2015

Robson Souza

Olá Joel Rodrigues. É o seguinte, vou dar um ping em um laboratório de informática com 36 máquinas. (Sendo 4 bancadas com 9 computadores cada, onde o final do IP em cada bancada vai do número 1 ao número 9 com o número da bancada como prefixo. Ou seja, bancada 1 vai do PC 11 ao 19. Bancada 2 vai do PC 21 ao 29. Bancada 3 vai do PC 31 ao 39 e bancada 4 vai do PC 41 ao 49).
Se o computador responder ao ping, no formulário o PictureBox do computador referente aquele computador em questão irá alterar a imagem de um computador desligado para um computador ligado.
Eu consigo fazer isso perfeitamente com um If ou um switch, mas eu queria economizar linha de código e alterar a imagem da picturebox no momento que eu estou fazendo o looping para disparar os pings.

Tipo, se eu pinguei na máquina com final do IP 11 e a máquina responder ao ping, a Picturebox de nome pctMq11 vai alterar a imagem.

Dai a forma que eu achei que funcionaria seria criar a linha de comando numa string e executar ela em seguida. Ficaria tipo assim:

For bancadaatual As Integer = 1 To bancadatotal Step 1
            For maqatual As Integer = 1 To maqfinal Step 1
                
                ipnumber = String.Format("10.117." & labatual & "." & bancaatual & maqatual)
                Dim teste As PingReply = pingsender.Send(ipnumber)
                
                If teste.Status = IPStatus.Success Then
                    comando = String.Format("pctMq" & bancadaatual & maqatual& ".Image = My.Resources.Computer_On")
                    ' E aqui entraria alguma forma de executar o conteúdo da string COMANDO
                End If

            Next
        Next


Mas se não tem como fazer a string ser executada como comando, então o jeito é fazer um Switch para as 36 picturebox.

Obrigado pela atenção.
Responder

20/02/2015

Joel Rodrigues

Se os PictureBoxes seguem um padrão de nomenclatura (pctMq + número), você pode fazer um loop nos controles do Form e verificar se o nome corresponde ao que você deseja. Se o nome corresponder, esse é o PictureBox que você deve alterar, aí basta fazer um cast do controle para PictureBox e alterar a imagem.

Desculpe não postar um exemplo agora, é que estou no celular. Mas deu pra entender a ideia?
Responder

23/02/2015

Joel Rodrigues

Conseguiu fazer?
Responder

23/02/2015

Robson Souza

Então, as imagens seguem um padrão sim, só o IP que o terceiro octeto muda de acordo com o Lab, mas o quarto octeto é padrão.

Acabei fazendo um Select Case mesmo para resolver a situação.

Private Sub alteraricone(ByRef bancadaatual As Integer, ByRef maquinaatual As Integer)
        Dim num As Integer = bancadaatual & maquinaatual
        Select Case num
            Case 11
                pctMq11.Image = My.Resources.Computer_On
            Case 12
                pctMq12.Image = My.Resources.Computer_On
            Case 13
                pctMq13.Image = My.Resources.Computer_On
            Case 14
                pctMq14.Image = My.Resources.Computer_On
            Case 15
                pctMq15.Image = My.Resources.Computer_On
            Case 16
                pctMq16.Image = My.Resources.Computer_On

Etc...
Responder

09/03/2015

Danilo Fonseca

Ola Robson, sou novo na area e estou começando um projeto em VB para monitorar alguns dispositivos de rede. Bom eu não sei como utilizar o comando ping dentro do VB, vc pode me dar uma ideia?
abrcs!
Responder

10/03/2015

Robson Souza

Ola Robson, sou novo na area e estou começando um projeto em VB para monitorar alguns dispositivos de rede. Bom eu não sei como utilizar o comando ping dentro do VB, vc pode me dar uma ideia?
abrcs!


Danilo, achar conteúdo sobre redes na internet é meio chatinho, por sorte eu já tinha feito um teste e salvei o código. Vou passar um exemplo para você (embora talvez os administradores do fórum possam vir a excluir esta conversa, pois ela foge um pouco do assunto abordado na abertura deste tópico, então aconselho a copiar o conteúdo o mais breve possível.

Segue o código:

'Antes de tudo você deve importar a biblioteca que trabalha com comandos de rede.
Imports System.Net.NetworkInformation

'Crie uma função para executar essa ação
Public Sub verificaStatus() 

'Aqui criamos uma variável booleana para armazenar se o meu computador está conectado na internet ou não. Isso pode vir a ser util para você.
'Ou seja, esta variavel vai armazenar TRUE (se o computador estiver com rede) ou FALSE (se a rede não estiver disponível).
        Dim status As Boolean = My.Computer.Network.IsAvailable 

'No meu caso eu fiz uma condição para alterar a imagem de uma picturebox para visualizar no fomulário se o meu computador está com acesso a internet ou não.
        If status = True Then
            frmControleLab.pctPC11.Image = Image.FromFile("images\computer-02.png")
        End If

'Essa parte do código é a que você está precisando. Não está difícil de entender, basta substituir o IP que eu coloquei entre aspas pelo IP que você deseja pingar.
        Dim pingsender As Ping = New Ping
        Dim teste As PingReply = pingsender.Send("10.116.1.1")

'Assim como na verificação do meu computador, eu fiz uma condição para trocar a imagem de uma picturebox caso o computador que eu pinguei responda.
        If teste.Status = IPStatus.Success Then
            frmControleLab.pctPC12.Image = My.Resources.computer_02
        End If
        
    End Sub



Uma rápida pesquisa na internet e você descobre o que mais consegue fazer com a biblioteca System.Net.NetworkInformation
https://msdn.microsoft.com/pt-br/library/system.net.networkinformation%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar