Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 511353
            [titulo] => Como executar um comando que está dentro de uma String? VB.NET
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-02-20 21:54:41
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 232232
            [status] => A
            [isExample] => 
            [NomeUsuario] => Joel Rodrigues
            [Apelido] => 
            [Foto] => 232232_20161017163010.jpg
            [Conteudo] => Cara, você está querendo criar um compilador. Qual é sua real necessidade, de repente conseguimos achar uma solução mais simples.
        )

)

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

Robson Souza
   - 19 fev 2015

Olá a todos!

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

Exemplo:
#Código

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.

Post mais votado

Joel Rodrigues
   - 20 fev 2015

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

Robson Souza
   - 20 fev 2015

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:

#Código

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.

Joel Rodrigues
   - 20 fev 2015

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?

Joel Rodrigues
   - 23 fev 2015

Conseguiu fazer?

Robson Souza
   - 23 fev 2015

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.

#Código

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...

Danilo Fonseca
   - 09 mar 2015

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!

Robson Souza
   - 10 mar 2015


Citação:
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:

#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