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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar